Code:

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int N = 200000+5;
int n,m,k;
struct Segment_Tree{
int lazy,left,right,maxv;
}Seg[N<<2];
inline void push_down(int o,int l,int r)
{
if(Seg[o].lazy == -1 || l==r)return;
int mid = (l+r)>>1;
int lz = Seg[o].lazy, ls=o<<1, rs=(o<<1)|1;
Seg[ls].lazy = Seg[rs].lazy = lz;
Seg[ls].maxv = lz==0 ? mid-l+1: 0;
Seg[rs].maxv = lz==0 ? r-mid: 0;
Seg[ls].left = Seg[ls].right = Seg[ls].maxv;
Seg[rs].left = Seg[rs].right = Seg[rs].maxv;
Seg[o].lazy = -1;
}
inline void update_seg(int o,int l,int r)
{
int mid = (l+r)>>1, ls=o<<1, rs=(o<<1)|1;
Seg[o].maxv = max(Seg[ls].maxv, Seg[rs].maxv);
Seg[o].maxv = max(Seg[o].maxv, Seg[ls].right+Seg[rs].left);
Seg[o].left = Seg[ls].maxv == mid-l+1 ? Seg[ls].maxv+Seg[rs].left : Seg[ls].left;
Seg[o].right = Seg[rs].maxv == r-mid ? Seg[rs].maxv+Seg[ls].right: Seg[rs].right;
}
void build_Tree(int l,int r,int o){
if(l>r)return;
if(l==r)
{
Seg[o].left = Seg[o].right = Seg[o].maxv = 1;
Seg[o].lazy = -1;
return;
}
int mid = (l+r)>>1, ls=o<<1, rs=(o<<1)|1;
build_Tree(l,mid,ls);
build_Tree(mid+1,r,rs);
update_seg(o,l,r);
Seg[o].lazy = -1;
}
void update(int L,int R,int l,int r,int val,int o){
if(L>R)return;
if(L>=l&&R<=r)
{
Seg[o].lazy = val;
Seg[o].maxv = (val==0)?R-L+1: 0;
Seg[o].left = Seg[o].right = Seg[o].maxv;
return;
}
push_down(o,L,R);
int mid = (L+R)>>1,ls=o<<1, rs=(o<<1)|1;
if(l<=mid) update(L,mid,l,r,val,ls);
if(r>mid) update(mid+1,R,l,r,val,rs);
update_seg(o,L,R);
}
int query(int o,int l,int r){
int mid=(l+r)>>1, ls=o<<1, rs=(o<<1)|1, ans;
push_down(o,l,r);
if(Seg[o].left >= k)
ans = l;
else if(Seg[ls].maxv >=k )
ans = query(ls,l,mid);
else if(Seg[ls].right+Seg[rs].left >= k)
ans = mid+1-Seg[ls].right;
else
ans = query( rs ,mid+1,r);
update_seg(o,l,r);
return ans;
}
inline int solve_1(){
if(Seg[1].maxv < k)return 0;
return query(1,1,n);
}
int main()
{
// freopen("in.txt","r",stdin);
// freopen("out.txt","w",stdout);
scanf("%d%d",&n,&m);
build_Tree(1,n,1);
while(m--)
{
int op,x,y;
scanf("%d%d",&op,&x);
if(op==1)
{
k=x;
int ans=solve_1();
printf("%d\n",ans);
if(ans!=0)update(1,n,ans,ans+k-1,1,1);
}
if(op==2)
{
scanf("%d",&y);
update(1,n,x,x+y-1,0,1);
}
}
return 0;
}

  

洛谷P2894 [USACO08FEB]酒店Hotel_区间更新_区间查询的更多相关文章

  1. 洛谷 P2894 [USACO08FEB]酒店Hotel-线段树区间合并(判断找位置,不需要维护端点)+分治

    P2894 [USACO08FEB]酒店Hotel 题目描述 The cows are journeying north to Thunder Bay in Canada to gain cultur ...

  2. 洛谷P2894 [USACO08FEB]酒店Hotel

    P2894 [USACO08FEB]酒店Hotel https://www.luogu.org/problem/show?pid=2894 题目描述 The cows are journeying n ...

  3. 洛谷 P2894 [USACO08FEB]酒店Hotel 解题报告

    P2894 [USACO08FEB]酒店Hotel 题目描述 The cows are journeying north to Thunder Bay in Canada to gain cultur ...

  4. 区间连续长度的线段树——洛谷P2894 [USACO08FEB]酒店Hotel

    https://www.luogu.org/problem/P2894 #include<cstdio> #include<iostream> using namespace ...

  5. 洛谷P2894 [USACO08FEB]酒店Hotel [线段树]

    题目传送门 酒店 题目描述 The cows are journeying north to Thunder Bay in Canada to gain cultural enrichment and ...

  6. 洛谷P2894[USACO08FEB]酒店Hotel(线段树)

    问题描述 奶牛们最近的旅游计划,是到苏必利尔湖畔,享受那里的湖光山色,以及明媚的阳光.作为整个旅游的策划者和负责人,贝茜选择在湖边的一家著名的旅馆住宿.这个巨大的旅馆一共有N (1 <= N & ...

  7. 洛谷 P2894 [USACO08FEB]酒店

    题目描述 用线段树维护三个值:区间最长空位长度,从左端点可以延伸的最长空位长度,从右端点可以延伸的最长空位长度. #include<complex> #include<cstdio& ...

  8. 洛谷 P2894 [USACO08FEB]酒店Hotel

    题目描述 The cows are journeying north to Thunder Bay in Canada to gain cultural enrichment and enjoy a ...

  9. 线段树【洛谷P2894】 [USACO08FEB]酒店Hotel

    P2894 [USACO08FEB]酒店Hotel 参考样例,第一行输入n,m ,n代表有n个房间,编号为1---n,开始都为空房,m表示以下有m行操作,以下 每行先输入一个数 i ,表示一种操作: ...

随机推荐

  1. NLP问题特征表达基础 - 语言模型(Language Model)发展演化历程讨论

    1. NLP问题简介 0x1:NLP问题都包括哪些内涵 人们对真实世界的感知被成为感知世界,而人们用语言表达出自己的感知视为文本数据.那么反过来,NLP,或者更精确地表达为文本挖掘,则是从文本数据出发 ...

  2. 命令行下配置Windows 2003防火墙

    命令:netsh firewall 参数: ? // 显示命令列表 add // 添加防火墙配置 delete // 删除防火墙配置 dump // 显示一个配置脚本 help // 显示命令列表 r ...

  3. ExtJs之Ext.ElementLoader.load

    稍微书上代码不适合. var btns = Ext.select('input'); 需要更改为: var btns = Ext.select('input', true); 不然报错: [E] Ex ...

  4. CSS3 timing-function: steps()介绍

    在应用 CSS3 渐变/动画时.有个控制时间的属性 <timing-function>.它的取值中除了经常使用到的三次贝塞尔曲线以外,还有个steps() 函数. steps 函数指定了一 ...

  5. CodeForces - 344A Magnets (模拟题)

    CodeForces - 344A id=46664" style="color:blue; text-decoration:none">Magnets Time ...

  6. Aizu/Aoj 0121 Seven Puzzle

    这题应该算是经典的八数码问题的弱化版吧:给你一个4x2的方版,上面有0-7 八个数字,每次只能让编号0的方格跟他的上下左右的方格交换:所以也就是把方格0当做空格看待,每次只有空格周围的方格能够向空格处 ...

  7. 【cl】oracle之Sequence

    sequence:序列 首先要有create sequence或者create any sequence权限: 1.语法如下: create sequence  cltest---序列名 increm ...

  8. setOutputFormat called in an invalid state: 1

    在编写一个简单的录像应用程序的时候,爆出例如以下异常: E MediaRecorder: setOutputFormat called in an invalid state: 1 E Android ...

  9. convert命令的使用【转】

    本文转载自; http://www.charry.org/docs/linux/ImageMagick/ImageMagick.html

  10. php xml 转array 函数 (原创)

    /** *Author zhudongchang *Date 2015/6/12 原创 *xml 转array 函数 *@param string $xmlStr xml字符串 *@return st ...