题意:给你一个序列,初始是0,每次一个操作,把一个数^=1

   每次求出最长01串的长度

正解:线段树(虽然暴力能过)

   对于每个区间,记录三个值

   lmax,以l为首的01串长度

   rmax,以r为尾的01串长度

   mmax,既不以l又不以r为为端点的完全包在区间内的最长01串长度

注意合并!

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cctype>
#include<algorithm>
using namespace std;
#define int long long
#define olinr return
#define _ 0
#define love_nmr 0
#define DB double
bool turn[];
struct node
{
node *ls;
node *rs;
int lmax;
int rmax;
int mmax;
int l;
int r;
int len;
};
int n;
int m;
inline int read()
{
int x=,f=;
char ch=getchar();
while(!isdigit(ch))
{
if(ch=='-')
f=-f;
ch=getchar();
}
while(isdigit(ch))
{
x=(x<<)+(x<<)+(ch^);
ch=getchar();
}
return x*f;
}
inline void put(int x)
{
if(x<)
{
x=-x;
putchar('-');
}
if(x>)
put(x/);
putchar(x%+'');
}
inline void push_up(node *now,int pos)
{
now->lmax=now->ls->lmax; //最起码当前区间的lmax也得等于左儿子的lmax
if(turn[pos]!=turn[pos+]&&now->lmax==(now->ls->len)) //看左孩子右端和右孩子左端是否能接上&&lmax刚好为区间长度(全符合)
now->lmax+=now->rs->lmax; //接上
now->rmax=now->rs->rmax; //右孩子同理
if(turn[pos]!=turn[pos+]&&now->rmax==(now->rs->len))
now->rmax+=now->ls->rmax;
now->mmax=max(now->ls->mmax,now->rs->mmax); //中间的先去max
if(turn[pos]!=turn[pos+])
now->mmax=max(now->mmax,now->ls->rmax+now->rs->lmax); //考虑接上的情况
}
inline void build(node *now,int l,int r)
{
now->l=l;
now->r=r;
now->lmax=;
now->rmax=;
now->mmax=;
now->len=now->r-now->l+;
if(l==r)
{
now->lmax=;
now->rmax=; //最短为1
now->mmax=;
return;
}
int mid=(l+r)>>;
now->ls=new node();
now->rs=new node();
build(now->ls,l,mid);
build(now->rs,mid+,r);
push_up(now,mid);
}
inline void lazy(node *now,int k)
{
if(now->l>k||now->r<k) return;
if(now->l==k&&now->r==k)
{
turn[now->l]^=; //到达叶子直接更新
return;
}
lazy(now->ls,k);
lazy(now->rs,k);
push_up(now,(now->l+now->r)>>);
}
signed main()
{
n=read();
m=read();
node *root=new node();
build(root,,n);
while(m--)
{
lazy(root,read());
put(max(root->lmax,max(root->rmax,root->mmax))); //根(全序列)取max
putchar('\n');
}
olinr ~~(^_^)+love_nmr;
}

最新文章

  1. C#窗体中读取修改xml文件
  2. 95、Jenkins部署.net持续集成自动化测试环境
  3. Google翻译请求(难点是tk参数)
  4. 关于JAVA EE项目在WEB-INF目录下的jsp页面如何访问WebRoot中的CSS和JS文件
  5. Proxy模式:管理第三方API
  6. 不可或缺 Windows Native (3) - C 语言: 运算符,表达式,条件语句,循环语句,转向语句,空语句等
  7. 数据库设计==&gt;&gt;MySchool
  8. &lt;math.h&gt;与&lt;float.h&gt;
  9. 二分求解 三角形 stl的应用 涉及范围的二分查找可以先求上界再算下界,结果即上界减下界
  10. MySQL(三)之SQL语句分类、基本操作、三大范式
  11. iOS上new Date异常解决办法
  12. 基于Orangpi Zero和Linux ALSA实现WIFI无线音箱(三)
  13. Django-CRM项目学习(六)-rbac模块(权限组件)
  14. php下kafka实践
  15. luogu P3201 [HNOI2009]梦幻布丁
  16. Mathematica绘制曲面交线方法
  17. Apache正向代理和反向代理
  18. ios-复制字符串到剪贴板
  19. ---github git clone 加速
  20. BZOJ2730 [HNOI2012]矿场搭建 - Tarjan割点

热门文章

  1. _tprintf(), printf(),wprintf() 与控制字符 %s 和 %S(Unicoe与GB2312))
  2. 第十三章 Spring框架的设计理念与设计模式分析(待续)
  3. 问题:C#属性;结果:c# 属性
  4. DAY9-python并发之多进程理论
  5. javaScript之节点操作
  6. Solr根据参考点的坐标来返回范围内的小区和距离
  7. Class类动态加载类的用法
  8. 关于android中出现failed to read row 0,column -1错误
  9. Codeforces #504(div1+div2) 1023D Array Restoration(线段树)
  10. WCF客户端调用并行最大同时只支持两个请求