洛谷P2894 [USACO08FEB]酒店Hotel_区间更新_区间查询
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_区间更新_区间查询的更多相关文章
- 洛谷 P2894 [USACO08FEB]酒店Hotel-线段树区间合并(判断找位置,不需要维护端点)+分治
P2894 [USACO08FEB]酒店Hotel 题目描述 The cows are journeying north to Thunder Bay in Canada to gain cultur ...
- 洛谷P2894 [USACO08FEB]酒店Hotel
P2894 [USACO08FEB]酒店Hotel https://www.luogu.org/problem/show?pid=2894 题目描述 The cows are journeying n ...
- 洛谷 P2894 [USACO08FEB]酒店Hotel 解题报告
P2894 [USACO08FEB]酒店Hotel 题目描述 The cows are journeying north to Thunder Bay in Canada to gain cultur ...
- 区间连续长度的线段树——洛谷P2894 [USACO08FEB]酒店Hotel
https://www.luogu.org/problem/P2894 #include<cstdio> #include<iostream> using namespace ...
- 洛谷P2894 [USACO08FEB]酒店Hotel [线段树]
题目传送门 酒店 题目描述 The cows are journeying north to Thunder Bay in Canada to gain cultural enrichment and ...
- 洛谷P2894[USACO08FEB]酒店Hotel(线段树)
问题描述 奶牛们最近的旅游计划,是到苏必利尔湖畔,享受那里的湖光山色,以及明媚的阳光.作为整个旅游的策划者和负责人,贝茜选择在湖边的一家著名的旅馆住宿.这个巨大的旅馆一共有N (1 <= N & ...
- 洛谷 P2894 [USACO08FEB]酒店
题目描述 用线段树维护三个值:区间最长空位长度,从左端点可以延伸的最长空位长度,从右端点可以延伸的最长空位长度. #include<complex> #include<cstdio& ...
- 洛谷 P2894 [USACO08FEB]酒店Hotel
题目描述 The cows are journeying north to Thunder Bay in Canada to gain cultural enrichment and enjoy a ...
- 线段树【洛谷P2894】 [USACO08FEB]酒店Hotel
P2894 [USACO08FEB]酒店Hotel 参考样例,第一行输入n,m ,n代表有n个房间,编号为1---n,开始都为空房,m表示以下有m行操作,以下 每行先输入一个数 i ,表示一种操作: ...
随机推荐
- Laravel 5
遍历数组@foreach($brand as $v) <a href='/brandss/seeshops?id={{$v->id}}'><img src="/pub ...
- 【ACM】poj_1363_Rails_201308081502
Rails Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 21528 Accepted: 8597 Descriptio ...
- DNS绑定多个IP地址
DNS轮循技术 首先介绍一个DNS系统:传统的DNS解析都是一个域名对应一个IP地址,但是通过DNS轮循技术(负载平衡技术)可以做到一个域名对应到多个IP 上. 这样大家难免就会问,这个技术有什么用呢 ...
- D - Mayor's posters
D - Mayor's posters POJ - 2528 思路:线段树+离散化. 离散化时注意特殊情况,如果两个数相差大于一,离散时也应该差1.比如 1 3 离散后应该为 1 2. 错因: 1.二 ...
- Android入门:短信和拨打电话
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/ ...
- NYOJ_268_荷兰国旗问题
荷兰国旗问题 时间限制:3000 ms | 内存限制:65535 KB 难度:1 描写叙述 荷兰国旗有三横条块构成,自上到下的三条块颜色依次为红.白.蓝.现有若干由红.白.蓝三种颜色的条块序列.要 ...
- Hadoop Web项目--Friend Find系统
项目使用软件:Myeclipse10.0,JDK1.7,Hadoop2.6,MySQL5.6.EasyUI1.3.6.jQuery2.0,Spring4.1.3. Hibernate4.3.1,str ...
- word2vec (一) 简介与训练过程概要
摘自:http://blog.csdn.net/thriving_fcl/article/details/51404655 词的向量化与word2vec简介 word2vec最初是Tomas Miko ...
- NAS与SAN有什么区别?
NAS和SAN字面上相似,并且都是新型数据存储模式,但这二者是完全不同的,针对不同方向的技术,为了能够更好的区分它们,天伟数据恢复整理了以下内容供读者参考(天伟数据恢复建议重要数据多备份,备份很重要以 ...
- c语言递归讲解分析
C语言允许函数调用它自己,这种调用的过程称为"递归(recursion)" 举例说明,如下代码: #include <stdio.h> void up_and_down ...