题意:1 a:询问是不是有连续长度为a的空房间,有的话住进最左边
2 a b:将[a,a+b-1]的房间清空
思路:记录区间中最长的空房间
线段树操作:update:区间替换 query:询问满足条件的最左断点
Sample Input
10 6        10个房间 6次询问
1 3         找3个房间
1 3
1 3
1 3
2 5 5       将5~5+5-1的房间清空
1 6
Sample Output
1
4
7
0
5

不是很好写

 #include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#include<map>
using namespace std;
#define MOD 1000000007
const int INF=0x3f3f3f3f;
const double eps=1e-;
#define cl(a) memset(a,0,sizeof(a))
#define ts printf("*****\n");
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define root 1,n,1
#define mid ((l+r)>>1)
const int MAXN=;
int n,m,t,Min,tt;
int msum[MAXN<<],col[MAXN<<],hash[MAXN],lsum[MAXN<<],rsum[MAXN<<];
void build(int l,int r,int rt)
{
msum[rt]=lsum[rt]=rsum[rt]=r-l+;
col[rt]=-;
if (l==r) return ;
build(lson);
build(rson);
}
void pushup(int rt,int m)
{
lsum[rt]=lsum[rt<<];
rsum[rt]=rsum[rt<<|];
if(lsum[rt]==(m-(m>>))) lsum[rt]+=lsum[rt<<|];
if(rsum[rt]==(m>>)) rsum[rt]+=rsum[rt<<];
msum[rt]=max(lsum[rt<<|]+rsum[rt<<],max(msum[rt<<],msum[rt<<|]));
}
void pushdown(int rt,int m)
{
if(col[rt]!=-)
{
col[rt<<]=col[rt<<|]=col[rt];
msum[rt<<]=lsum[rt<<]=rsum[rt<<]=col[rt]?:(m-(m>>));
msum[rt<<|]=lsum[rt<<|]=rsum[rt<<|]=col[rt]?:(m>>);
col[rt]=-;
}
}
void update(int L,int R,int val,int l,int r,int rt)
{
if(l>=L&&r<=R)
{
msum[rt]=lsum[rt]=rsum[rt]=val?:r-l+;
col[rt]=val;
return;
}
pushdown(rt,r-l+);
if(L<=mid) update(L,R,val,lson);
if(R>mid) update(L,R,val,rson);
pushup(rt,r-l+);
}
int query(int val,int l,int r,int rt){
if(l==r)
{
return l;
}
pushdown(rt,r-l+);
if(msum[rt<<]>=val) return query(val,lson);
else if(rsum[rt<<]+lsum[rt<<|]>=val) return ((l+r)>>)-rsum[rt<<]+;
return query(val,rson);
} int main()
{
#ifndef ONLINE_JUDGE
freopen("1.in","r",stdin);
#endif
scanf("%d%d",&n,&m);
build(root);
while(m--)
{
int op,a,b;
scanf("%d",&op);
if(op == )
{
scanf("%d",&a);
if(msum[]<a) puts("");
else
{
int p=query(a,root);
printf("%d\n",p);
update(p,p+a-,,root);
}
}
else
{
scanf("%d%d",&a,&b);
update(a,a+b-,,root);
}
}
return ;
}

最新文章

  1. 《DSP using MATLAB》示例Example5.15
  2. 2013-09-22 [随笔]-Roy
  3. iOS 关于手势
  4. Ubuntu 设置程序开机启动(以指定用户身份)
  5. android api汇集
  6. java EE实现动态SQL的
  7. android开发布局文件imageview 图片等比例缩放:
  8. JS学习笔记-1--基本知识和注意事项
  9. [itint5]完全二叉树节点个数的统计
  10. 自制单片机之二-----AT89S51ISP下载线的制做
  11. 给你的Cordova HybridApp加入Splash启动页面
  12. 关于SIGSLOT的一个简单的程序
  13. D3D 扎带 小样本
  14. Unity插件 - MeshEditor(二) 模型网格编辑器(高级)
  15. Python 魔术方法笔记
  16. eval方法
  17. 025 SSM简单搭建
  18. linux 远程连接ssh提示IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY解决
  19. @method_decorator() 源码解析
  20. IBatisNet动态update以及DateTime类型字段处理

热门文章

  1. excel导入时候日期格式转成date
  2. Intent 对象在 Android 开发中的应用
  3. html5新增表单元素
  4. APUE-文件和目录(八)文件时间
  5. java基础41 枚举(类)
  6. 淘宝开放平台TOP SDK调用对接淘宝或天猫
  7. Elasticsearch 6.x 的分页查询数据
  8. InterSystems Ensemble学习笔记(一) Ensemble介绍及安装
  9. sicily 1046. Plane Spotting(排序求topN)
  10. php输出多余的空格或者空行