对照着notonlysuccess大牛的代码写的

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
using namespace std;
const int maxn=55555;
int msum[maxn<<2],lsum[maxn<<2],rsum[maxn<<2],cover[maxn<<2];
void build(int l,int r,int rt)
{
cover[rt]=-1;
msum[rt]=lsum[rt]=rsum[rt]=r-l+1;
if(l==r) return ;
int m=(r+l)>>1;
build(lson);
build(rson);
}
void pushUp(int rt,int m)
{
lsum[rt]=lsum[rt<<1];
rsum[rt]=rsum[rt<<1|1];
if (lsum[rt] == m - (m >> 1)) lsum[rt] += lsum[rt<<1|1];
if (rsum[rt] == (m >> 1)) rsum[rt] += rsum[rt<<1];
msum[rt] = max(lsum[rt<<1|1] + rsum[rt<<1] , max(msum[rt<<1] , msum[rt<<1|1]));
}
void pushdown(int rt,int m)
{
if(cover[rt]!=-1)
{
cover[rt<<1] = cover[rt<<1|1] = cover[rt];
msum[rt<<1]=rsum[rt<<1]=lsum[rt<<1]=cover[rt]?0:m-(m>>1);
msum[rt<<1|1]=rsum[rt<<1|1]=lsum[rt<<1|1]=cover[rt]?0:m>>1;
cover[rt]=-1;
}
}
void update(int L,int R,int b,int l,int r,int rt)
{
if(L<=l&&R>=r)
{
msum[rt]=lsum[rt]=rsum[rt]=b?0:r-l+1;
cover[rt]=b;
return;
}
pushdown(rt,r-l+1);
int m=(r+l)>>1;
if(L<=m) update(L,R,b,lson);
if(m<R) update(L,R,b,rson);
pushUp(rt,r-l+1);
}
int query(int a,int l,int r,int rt)
{
if(l==r) return l;
pushdown(rt,r-l+1);
int m=(r+l)>>1;
if(msum[rt<<1]>=a) return query(a,lson);
else if(lsum[rt<<1|1]+rsum[rt<<1]>=a)
return m-rsum[rt<<1]+1;
return query(a,rson);
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
build(1,n,1);
for(int i=0;i<m;i++)
{
int op,a,b;
scanf("%d",&op);
if(op==1)
{
scanf("%d",&a);
if(msum[1]<a) puts("0");
//printf("0\n");
else{
int p=query(a,1,n,1);
printf("%d\n",p);
//cout<<"##"<<endl;
update(p,p+a-1,1,1,n,1);
}
}
else
{
scanf("%d%d",&a,&b);
//cout<<"############"<<endl;
update(a,a+b-1,0,1,n,1);
// cout<<msum[1]<<"$$"<<endl;
}
}
return 0;
}

poj_3667线段树区间合并的更多相关文章

  1. POJ 3667 Hotel(线段树 区间合并)

    Hotel 转载自:http://www.cnblogs.com/scau20110726/archive/2013/05/07/3065418.html [题目链接]Hotel [题目类型]线段树 ...

  2. HDU 3911 线段树区间合并、异或取反操作

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=3911 线段树区间合并的题目,解释一下代码中声明数组的作用: m1是区间内连续1的最长长度,m0是区间内连续 ...

  3. HDU 3911 Black And White(线段树区间合并+lazy操作)

    开始以为是水题,结果...... 给你一些只有两种颜色的石头,0为白色,1为黑色. 然后两个操作: 1 l r 将[ l , r ]内的颜色取反 0 l r 计算[ l , r ]内最长连续黑色石头的 ...

  4. HYSBZ 1858 线段树 区间合并

    //Accepted 14560 KB 1532 ms //线段树 区间合并 /* 0 a b 把[a, b]区间内的所有数全变成0 1 a b 把[a, b]区间内的所有数全变成1 2 a b 把[ ...

  5. poj3667 线段树 区间合并

    //Accepted 3728 KB 1079 ms //线段树 区间合并 #include <cstdio> #include <cstring> #include < ...

  6. hdu3911 线段树 区间合并

    //Accepted 3911 750MS 9872K //线段树 区间合并 #include <cstdio> #include <cstring> #include < ...

  7. 线段树(区间合并) POJ 3667 Hotel

    题目传送门 /* 题意:输入 1 a:询问是不是有连续长度为a的空房间,有的话住进最左边 输入 2 a b:将[a,a+b-1]的房间清空 线段树(区间合并):lsum[]统计从左端点起最长连续空房间 ...

  8. HDU 3308 LCIS (线段树区间合并)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3308 题目很好懂,就是单点更新,然后求区间的最长上升子序列. 线段树区间合并问题,注意合并的条件是a[ ...

  9. SPOJ GSS1_Can you answer these queries I(线段树区间合并)

    SPOJ GSS1_Can you answer these queries I(线段树区间合并) 标签(空格分隔): 线段树区间合并 题目链接 GSS1 - Can you answer these ...

随机推荐

  1. ajax 获取 json 数据乱码

    打开json文本把json文件另存为 'utf-8' 编码格式的文件.....

  2. apk去广告工具(利用apktool去除apk文件里的广告)

    基本知识 apk安装包的文件结构 以知名桌面软件“LauncherPro”为例,apk安装包文件目录: 文件目录如下: - META-INF - res - anim - color - drawab ...

  3. 基于sparksql调用shell脚本运行SQL

    [Author]: kwu 基于sparksql调用shell脚本运行SQL,sparksql提供了类似hive中的 -e  , -f ,-i的选项 1.定时调用脚本 #!/bin/sh # uplo ...

  4. What is the difference between Web Farm and Web Garden?

    https://www.codeproject.com/Articles/114910/What-is-the-difference-between-Web-Farm-and-Web-Ga Clien ...

  5. hdoj--3666--THE MATRIX PROBLEM(差分约束+SPFA深搜)

    THE MATRIX PROBLEM Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  6. http请求post,返回excel文件,并接收

    1.post的方法里要加responseType: 'arraybuffer'参数,不然下载的excel会乱码 2.使用{type: "application/vnd.ms-excel&qu ...

  7. opengl问题

    1.glCreateShader(GL_VERTEX_SHADER)失败原因: 在调用glewInit()初始化之后才能create shader;

  8. 优动漫PAINT基础系列之图层模式

    在绘画软件优动漫PAINT中,笔刷工具属性中的消除锯齿变成灰色无法选择了?铅笔绘制没有压感?快来改改图层模式~ 优动漫PAINT下载:http://www.dongmansoft.com/xiazai ...

  9. 原生的ajax请求----(播放托管到爱奇艺上的视频)

    播放视频 $(function(){ //视频播放 $('.play-icon').click(function () { $.ajax({ type:"get", url: &q ...

  10. luogub P4886 快递员(点分治)

    记得是9月月赛题,当时做的时候觉得跟ZJOI2015幻想乡战略游戏那道题很像???,就写了,然后就写挂了... 我们发现假设当前点为根,我们算出\(m\)次询问中最远的\(a\)对点,如果这\(a\) ...