P2253 好一个一中腰鼓!
2024-09-25 10:44:46
题意:给你一个序列,初始是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;
}
最新文章
- C#窗体中读取修改xml文件
- 95、Jenkins部署.net持续集成自动化测试环境
- Google翻译请求(难点是tk参数)
- 关于JAVA EE项目在WEB-INF目录下的jsp页面如何访问WebRoot中的CSS和JS文件
- Proxy模式:管理第三方API
- 不可或缺 Windows Native (3) - C 语言: 运算符,表达式,条件语句,循环语句,转向语句,空语句等
- 数据库设计==>;>;MySchool
- <;math.h>;与<;float.h>;
- 二分求解 三角形 stl的应用 涉及范围的二分查找可以先求上界再算下界,结果即上界减下界
- MySQL(三)之SQL语句分类、基本操作、三大范式
- iOS上new Date异常解决办法
- 基于Orangpi Zero和Linux ALSA实现WIFI无线音箱(三)
- Django-CRM项目学习(六)-rbac模块(权限组件)
- php下kafka实践
- luogu P3201 [HNOI2009]梦幻布丁
- Mathematica绘制曲面交线方法
- Apache正向代理和反向代理
- ios-复制字符串到剪贴板
- ---github git clone 加速
- BZOJ2730 [HNOI2012]矿场搭建 - Tarjan割点
热门文章
- _tprintf(), printf(),wprintf() 与控制字符 %s 和 %S(Unicoe与GB2312))
- 第十三章 Spring框架的设计理念与设计模式分析(待续)
- 问题:C#属性;结果:c# 属性
- DAY9-python并发之多进程理论
- javaScript之节点操作
- Solr根据参考点的坐标来返回范围内的小区和距离
- Class类动态加载类的用法
- 关于android中出现failed to read row 0,column -1错误
- Codeforces #504(div1+div2) 1023D Array Restoration(线段树)
- WCF客户端调用并行最大同时只支持两个请求