题意:询问区间最长连续空串

/*
用线段树维护区间最长连续左空串和右空串
*/
#include<cstdio>
#include<iostream>
#define N 50010
using namespace std;
int sum[N*],lsum[N*],rsum[N*],cover[N*],n,m;
void push_up(int k,int l,int r){
int mid=l+r>>;
sum[k]=max(max(sum[k*],sum[k*+]),rsum[k*]+lsum[k*+]);
lsum[k]=lsum[k*];
if(lsum[k*]==mid-l+) lsum[k]+=lsum[k*+];
rsum[k]=rsum[k*+];
if(rsum[k*+]==r-mid) rsum[k]+=rsum[k*];
}
void push_down(int k,int l,int r){
if(!cover[k]) return;
int mid=l+r>>;
if(cover[k]==-){
lsum[k*]=rsum[k*]=sum[k*]=;
lsum[k*+]=rsum[k*+]=sum[k*+]=;
cover[k*]=cover[k*+]=-;
}
else {
lsum[k*]=rsum[k*]=sum[k*]=mid-l+;
lsum[k*+]=rsum[k*+]=sum[k*+]=r-mid;
cover[k*]=cover[k*+]=;
}
cover[k]=;
}
void build(int l,int r,int k){
if(l==r){
cover[k]=;
lsum[k]=rsum[k]=sum[k]=;
return;
}
int mid=l+r>>;
build(l,mid,k*);
build(mid+,r,k*+);
push_up(k,l,r);
}
int query(int l,int r,int k,int x){
if(l==r)return l;
push_down(k,l,r);
int mid=l+r>>;
if(sum[k*]>=x)return query(l,mid,k*,x);
else if(rsum[k*]+lsum[k*+]>=x) return mid-rsum[k*]+;
else return query(mid+,r,k*+,x);
}
void change(int l,int r,int k,int c,int x,int y){
if(l>=x&&r<=y){
cover[k]=c;
lsum[k]=rsum[k]=sum[k]=c==-?:r-l+;
return;
}
push_down(k,l,r);
int mid=l+r>>;
if(x<=mid) change(l,mid,k*,c,x,y);
if(y>mid) change(mid+,r,k*+,c,x,y);
push_up(k,l,r);
}
int main(){
scanf("%d%d",&n,&m);
build(,n,);
for(int i=;i<=m;i++){
int opt,x,y;scanf("%d",&opt);
if(opt==){
scanf("%d",&x);
if(sum[]<x){
printf("0\n");
continue;
}
int p=query(,n,,x);
printf("%d\n",p);
change(,n,,-,p,p+x-);
}
else {
scanf("%d%d",&x,&y);
change(,n,,,x,x+y-);
}
}
return ;
}

最新文章

  1. jquery叠加页片自动切换特效
  2. 理解伪元素 :Before 和 :After
  3. Zookeeper开源客户端框架Curator简介[转]
  4. Unity5.3官方VR教程重磅登场-系列2
  5. word-wrap,word-break,text-wrap的区别
  6. spring mvc 笔记
  7. 安装ArchLinux的参考分区方案
  8. CentOS修改用户密码方法
  9. go单元测试进阶篇
  10. LINUX0.11 内核阅读笔记
  11. nodejs部署方式-pm2
  12. 登录界面,body上有背景图,点击输入框时,弹出的手机键盘会把背景图顶变形,而且会把footer顶上去
  13. MR执行环境有两种
  14. html5之上的图片处理
  15. poj 3685 Matrix 【二分】
  16. 【WPF】ImageMagick调节图片的颜色
  17. Java虚拟机(一)结构原理与运行时数据区域
  18. Python GUI工具Tkinter以及拖拉工具Page安装
  19. 在Editplus直接运行程序的步骤
  20. [SQLSERVER] 把TransactionLog截断

热门文章

  1. 【学习笔记】OSG中相机参数的更改
  2. mac下fiddler安装配置启动及iphone配置连接
  3. android应用流量信息提取
  4. SQLite -创建数据库
  5. (转)让Spring自动扫描和管理Bean
  6. 解决Homestead yarn , npm run dev, 命令报错问题!
  7. CAD交互绘制带颜色宽度的直线(网页版)
  8. python3查询Excel中A表在B表没有的数据,并保存到新的Excel,这里用的是“xlrd”和“xlwt”
  9. Vue通信、传值的多种方式,详解
  10. Java 多线程执行