考试前深陷分块泥潭所以刚开始以为是分块。

然而这题数据水到暴力卡常都能AC

正解:万物皆可线段树

节点存储区间长度、区间最长连续空房长度、从左往右最长连续空房长度、从右往左最长连续空房长度。

维护后三个值即可。

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int n,m;
const int N=50010;
int read()
{
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
struct node
{
int maxl,lm,rm,lazy,len;
#define mid (l+r>>1)
#define ls (k<<1)
#define rs (k<<1|1)
#define maxl(k) tree[k].maxl
#define lm(k) tree[k].lm
#define rm(k) tree[k].rm
#define lazy(k) tree[k].lazy
#define len(k) tree[k].len
}tree[N<<2];
void up(int k)
{
lm(k)=(lm(ls)==len(ls))?len(ls)+lm(rs):lm(ls);
rm(k)=(rm(rs)==len(rs))?len(rs)+rm(ls):rm(rs);
maxl(k)=max(rm(ls)+lm(rs),max(maxl(ls),maxl(rs)));
}
void downlazy(int k)
{
if(!lazy(k)) return ;
lazy(ls)=lazy(rs)=lazy(k);
maxl(ls)=lm(ls)=rm(ls)=(lazy(k)==1)?len(ls):0;
maxl(rs)=lm(rs)=rm(rs)=(lazy(k)==1)?len(rs):0;
lazy(k)=0;
}
void build(int l,int r,int k)
{
maxl(k)=lm(k)=rm(k)=len(k)=r-l+1;
if(l==r) return ;
build(l,mid,ls);
build(mid+1,r,rs);
}
void update(int L,int R,int op,int l,int r,int k)
{
if(L <= l && r <= R){
maxl(k)=lm(k)=rm(k)=(op==1)?len(k):0;
lazy(k)=op;
return ;
}
downlazy(k);
if(L<=mid) update(L,R,op,l,mid,ls);
if(R>mid) update(L,R,op,mid+1,r,rs);
up(k);
}
int query(int len,int l,int r,int k)
{
if(l==r) return l;
downlazy(k);
if(maxl(ls)>=len) return query(len,l,mid,ls);
if(rm(ls)+lm(rs)>=len) return mid-rm(ls)+1;
return query(len,mid+1,r,rs);
}
int main()
{
n=read();m=read();
build(1,n,1);
int op,x,d;
while(m--)
{
op=read();
if(op==1)
{
d=read();
if(maxl(1)>=d)
{
x=query(d,1,n,1);
printf("%d\n",x);
update(x,x+d-1,2,1,n,1);
}
else puts("0");
}
else
{
x=read();d=read();
update(x,x+d-1,1,1,n,1);
}
}
return 0;
}

最新文章

  1. jquery datepicker 只显示年月
  2. 递归,回溯,DFS,BFS的理解和模板【摘】
  3. ENTBOOST 2014.180L 发布,开源企业IM免费企业即时通讯
  4. 永久改动redhat的default route
  5. 最小费用最大流MCMF zkw费用流
  6. 解决Hibernate中不同包内有形同实体导致映射失败的问题
  7. Angular中Controller之间的信息传递(第二种办法):$emit,$broadcast,$on
  8. [用UpdateLayeredWindow实现任意异形窗口]
  9. php引入文件(include 和require的区别)
  10. Telegram学习解析系列(一):认识一下Telegram的源码
  11. Linux与堆栈概念
  12. 一个权重的物体拷贝权重给多个(oneWeightToMany)
  13. 用户对动态PHP网页访问过程,以及nginx解析php步骤
  14. HDU6213
  15. P2393 yyy loves Maths II
  16. 利用pyusb来查询当前所以usb设备
  17. link常用的作用
  18. (十)T检验-第一部分
  19. js replace全部替换的方法
  20. C API 连接MySQL及批量插入

热门文章

  1. 【ACM】nyoj_14_会场安排问题_201308151955
  2. OpenCV使用GPU
  3. UVA 10905
  4. java 的collection
  5. wait()方法写在while循环中可以在线程接到通知后再一次判断条件
  6. 为datatable添加自增列
  7. String字符串方法具体解释
  8. robin 今天来南大了
  9. 关于oracle 11g导出数据时 报 ORA 1455错误的处理
  10. jQuery - 制作非缘勿扰页面特效