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. ecshop 后台增加栏目

    ① 后台左侧导航添加菜单 Ecshop后台增加一个左侧列表菜单需要修改三个文件/admin/includes/inc_menu.php /admin/includes/inc_priv.php /la ...

  2. 解决Chrome在隐身模式下无法播放Flash视频

    在地址栏输入: chrome://flags/#prefer-html-over-flash 打开如下界面,并设置成如下所示: 然后点击左下方重启按钮: 参考: http://www.cnblogs. ...

  3. rsync与cwRsync

    以下这个链接是windows之间的csRsync和csRsyncServer同步教程: http://www.cnblogs.com/wwufengg/p/rsync-config.html !Att ...

  4. [MSSQL]採用pivot函数实现动态行转列

    环境要求:2005+ 在日常需求中常常会有行转列的事情需求处理.假设不是动态的行,那么我们能够採取case when 罗列处理. 在sql 2005曾经处理动态行或列的时候,通常採用拼接字符串的方法处 ...

  5. linux下图片转换工具[【转】

    本文转载自:https://linux.cn/article-8014-1.html 计算机术语中,批处理指的是用一个非交互式的程序来执行一序列的任务的方法.这篇教程里,我们会使用 Linux 命令行 ...

  6. linux logo的格式【转】

    本文转载自:http://blog.csdn.net/xiayu98020214/article/details/7394100 =================================== ...

  7. svn代码回滚命令【转】

    本文转载自:http://www.cnblogs.com/jndream/archive/2012/03/20/2407955.html 取消对代码的修改分为两种情况:   第一种情况:改动没有被提交 ...

  8. Web进行压力测试的小工具

    在Linux下对Web进行压力测试的小工具有很多,比较出名的有AB.虽然AB可以运行在windows下,但对于想简单界面操作的朋友有点不太习惯.其实vs.net也提供压力测试功能但显然显得太重了,在测 ...

  9. 【BZOJ1196】【HNOI2006】公路修建问题

    [描述] OI island是一个非常漂亮的岛屿,自开发以来,到这儿来旅游的人很多.然而,由于该岛屿刚刚开发不久,所以那里的交通情况还是很糟糕.所以,OIER Association组织成立了,旨在建 ...

  10. MAVEN 杂记

    MAVEN中央仓库 http://repo.maven.apache.org/maven2http://repo1.maven.org/maven2/http://mvnrepository.com/ ...