当前位置: 首页 > news >正文

洛谷P6492 COCI 2010 2011 6 STEP

#算法/线段树
题目
这题代码总体写出来不是很难,我们只需要围绕以下思路即可

ans代表区间满足要求的连续子串的长度。
lans代表以左端为首满足要求的连续子串的长度。
rans代表以右端为尾满足要求的连续子串的长度。
lch代表左端的字符,我们将初始字符都定义为0
rch代表右端的字符
len代表区间长度

1.拆分
与平常的线段树一样,一个区间拆分成左右区间考虑
2.长度更新
先将大区间的最长长度定义成左右区间的最长长度,其次,判断中间两个的值是否相同,如果不同,我们将左半部分最右侧的值加上右半部分左侧的最大长度,将相加的值再与最长长度进行比较

   ans[p]=max(ans[lc],ans[rc]);int lrc=rch[lc];int rlc=Lch[rc];if(lrc!=rlc){ans[p]=max(ans[p],rans[lc]+lans[rc]);}

3.更新区间两端长度
更新左侧:先将区间最左侧的长度更新为左半部分最左侧值,然后,判断左侧值长度是否与左区间相同,如果相同,我们再判断中间两个的值是否相同,如果不同,我们再将左侧的值加上右半部分左侧的值
更新右侧同理

 lans[p]=lans[lc];rans[p]=rans[rc];if(lans[lc]==len[lc]&&rch[lc]!=Lch[rc]){lans[p]+=lans[rc];}if(rans[rc]==len[rc]&&rch[lc]!=Lch[rc]){rans[p]+=rans[lc];}

完整代码

#include<iostream>#include<string>using namespace std;#define lc p<<1#define rc p<<1|1const int N=2e6;int Lch[N];int rch[N];int ans[N];int lans[N];int rans[N];int len[N];void build(int p,int l,int r){if(l>=r){        ans[p]=lans[p]=rans[p]=1;Lch[p]=rch[p]=0;len[p]=1;return;}int mid=l+r>>1;build(lc,l,mid);build(rc,mid+1,r);            ans[p]=lans[p]=rans[p]=1;Lch[p]=rch[p]=0;len[p]=r-l+1;}bool outRange(int pos,int L,int R){if(pos<L||pos>R)return true;return false;}void change(int p,int l,int r,int pos){if(outRange(pos,l,r))return;if(l==r){Lch[p]=rch[p]=Lch[p]^1;return;}int mid=l+r>>1;change(lc,l,mid,pos);change(rc,mid+1,r,pos);ans[p]=max(ans[lc],ans[rc]);int lrc=rch[lc];int rlc=Lch[rc];if(lrc!=rlc){ans[p]=max(ans[p],rans[lc]+lans[rc]);}rch[p]=rch[rc];Lch[p]=Lch[lc];lans[p]=lans[lc];rans[p]=rans[rc];if(lans[lc]==len[lc]&&rch[lc]!=Lch[rc]){lans[p]+=lans[rc];}if(rans[rc]==len[rc]&&rch[lc]!=Lch[rc]){rans[p]+=rans[lc];}}void query(int p,int l,int r,int pos){if(outRange(pos,l,r))return;if(l==r){cout<<Lch[p];return;}int mid=l+r>>1;query(lc,l,mid,pos);query(rc,mid+1,r,pos);}int main(void){int n,q;cin>>n>>q;build(1,1,n);for(int i=1;i<=q;i++){int pos;cin>>pos;change(1,1,n,pos);cout<<ans[1]<<endl;}}
http://www.dtcms.com/a/439632.html

相关文章:

  • 网站优化 西安杭州小程序公司实力排名
  • DeepSeek“问道”-第五章:问未来 —— 人机之间,能否共行于“道”?
  • 深圳赶集同城网站建设建设网站需要备案
  • 网站页面安全监测建设方案wordpress幻灯片代码
  • 错误代码:0x80072F8F-0x20000
  • 做网络竞拍的网站需要什么网站的论坛怎么做
  • 网站建设实习困难城市门户网站建设
  • JSP HTTP 状态码详解
  • flash网站制作单选框和复选框ui组件杭州网站建设 网站设计
  • 基于 GEE 快速获取研究区的 Landsat 无云影像
  • 公司网站搜索引擎优化wordpress 密码失败
  • 河北网站设计推荐柚米科技网站广告推广价格
  • 信阳哪里做网站平面设计网页设计专员
  • 大学网站建设与管理职责网站如何接广告赚钱
  • 济宁祥云网站建设二手交易网站怎么做
  • 企业建站用什么好深圳网站制作公司电话
  • 做电影网站失败了在微信上怎么卖自己的产品
  • 国家网站备案查询wordpress开发手册中文
  • 教务管理系统平台长沙专业网站优化定制
  • 自己怎么做视频网站wordpress文章归档页面
  • seo 网站做网站建设电话销售
  • 使用matlab进行牛顿迭代求函数极值的方法
  • ML4T - 第8章第0节 数据准备Data prep
  • 健康预测模型“AI听诊器”的Python编程探索:AI在健康预测/预防阶段的编程示例
  • 男和男做那个视频网站好深圳朝阳电子网站建设
  • 魔方财务对接rainyun教程(2025最新)!
  • 枣阳网站开发英文站用wordpress
  • Dify图文回复
  • 崇安区网站建设价格视觉设计包括
  • 第6篇|机械与电气系统设计要点:让“会转的高楼”既能跑、也会自保