Hotel 旅馆 题解(From luoguBlog)
考试前深陷分块泥潭所以刚开始以为是分块。
然而这题数据水到暴力卡常都能AC
正解:万物皆可线段树
节点存储区间长度、区间最长连续空房长度、从左往右最长连续空房长度、从右往左最长连续空房长度。
维护后三个值即可。
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int n,m;
const int N=50010;
int read()
{
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
struct node
{
int maxl,lm,rm,lazy,len;
#define mid (l+r>>1)
#define ls (k<<1)
#define rs (k<<1|1)
#define maxl(k) tree[k].maxl
#define lm(k) tree[k].lm
#define rm(k) tree[k].rm
#define lazy(k) tree[k].lazy
#define len(k) tree[k].len
}tree[N<<2];
void up(int k)
{
lm(k)=(lm(ls)==len(ls))?len(ls)+lm(rs):lm(ls);
rm(k)=(rm(rs)==len(rs))?len(rs)+rm(ls):rm(rs);
maxl(k)=max(rm(ls)+lm(rs),max(maxl(ls),maxl(rs)));
}
void downlazy(int k)
{
if(!lazy(k)) return ;
lazy(ls)=lazy(rs)=lazy(k);
maxl(ls)=lm(ls)=rm(ls)=(lazy(k)==1)?len(ls):0;
maxl(rs)=lm(rs)=rm(rs)=(lazy(k)==1)?len(rs):0;
lazy(k)=0;
}
void build(int l,int r,int k)
{
maxl(k)=lm(k)=rm(k)=len(k)=r-l+1;
if(l==r) return ;
build(l,mid,ls);
build(mid+1,r,rs);
}
void update(int L,int R,int op,int l,int r,int k)
{
if(L <= l && r <= R){
maxl(k)=lm(k)=rm(k)=(op==1)?len(k):0;
lazy(k)=op;
return ;
}
downlazy(k);
if(L<=mid) update(L,R,op,l,mid,ls);
if(R>mid) update(L,R,op,mid+1,r,rs);
up(k);
}
int query(int len,int l,int r,int k)
{
if(l==r) return l;
downlazy(k);
if(maxl(ls)>=len) return query(len,l,mid,ls);
if(rm(ls)+lm(rs)>=len) return mid-rm(ls)+1;
return query(len,mid+1,r,rs);
}
int main()
{
n=read();m=read();
build(1,n,1);
int op,x,d;
while(m--)
{
op=read();
if(op==1)
{
d=read();
if(maxl(1)>=d)
{
x=query(d,1,n,1);
printf("%d\n",x);
update(x,x+d-1,2,1,n,1);
}
else puts("0");
}
else
{
x=read();d=read();
update(x,x+d-1,1,1,n,1);
}
}
return 0;
}
Hotel 旅馆 题解(From luoguBlog)的更多相关文章
- 1593: [Usaco2008 Feb]Hotel 旅馆
1593: [Usaco2008 Feb]Hotel 旅馆 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 391 Solved: 228[Submit ...
- bzoj1593 [Usaco2008 Feb]Hotel 旅馆(线段树)
1593: [Usaco2008 Feb]Hotel 旅馆 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 758 Solved: 419[Submit ...
- Hotel 旅馆, 线段树查询,合并
C. Hotel 旅馆 内存限制:256 MiB 时间限制:1000 ms 标准输入输出 题目类型:传统 评测方式:文本比较 题目描述 OIER最近的旅游计划,是到长春净月潭,享受那里的湖光山色, ...
- BZOJ 1593: [Usaco2008 Feb]Hotel 旅馆
Description 奶牛们最近的旅游计划,是到苏必利尔湖畔,享受那里的湖光山色,以及明媚的阳光.作为整个旅游的策划者和负责人,贝茜选择在湖边的一家著名的旅馆住宿.这个巨大的旅馆一共有N (1 &l ...
- 线段树||BZOJ1593: [Usaco2008 Feb]Hotel 旅馆||Luogu P2894 [USACO08FEB]酒店Hotel
题面:P2894 [USACO08FEB]酒店Hotel 题解:和基础的线段树操作差别不是很大,就是在传统的线段树基础上多维护一段区间最长的合法前驱(h_),最长合法后驱(t_),一段中最长的合法区间 ...
- 【bzoj1593】[Usaco2008 Feb]Hotel 旅馆 线段树区间合并
题目描述 奶牛们最近的旅游计划,是到苏必利尔湖畔,享受那里的湖光山色,以及明媚的阳光.作为整个旅游的策划者和负责人,贝茜选择在湖边的一家著名的旅馆住宿.这个巨大的旅馆一共有N (1 <= N & ...
- 【BZOJ】1593: [Usaco2008 Feb]Hotel 旅馆
[算法]线段树(经典线段树上二分) [题意]n个房间,m个询问,每次订最前的连续x个的空房间,或退订从x开始y个房间,求每次订的最左房间号. [题解]关键在于找连续x个空房间,经典二分. 线段树标记s ...
- 【最长连续零 线段树】bzoj1593: [Usaco2008 Feb]Hotel 旅馆
最长连续零的线段树解法 Description 奶牛们最近的旅游计划,是到苏必利尔湖畔,享受那里的湖光山色,以及明媚的阳光.作为整个旅游的策划者和负 责人,贝茜选择在湖边的一家著名的旅馆住宿.这个巨大 ...
- BZOJ1593 [Usaco2008 Feb]Hotel 旅馆
裸上线段树,就是记的东西有点多... 每个点记区间左端最长0,右端最长0,中间最长0,和tag表示是否全为0/1 直接更新就好,查询的时候先查左儿子,然后查中间,最后查右儿子... /******** ...
随机推荐
- 2.1.6、SparkEnv中创建ShuffleManager
ShuffleManager负责管理本地以及远程的block数据的shuffle操作. ShffuleManager的创建是在SparkEnv中. // Let the user specify sh ...
- F2BPM中关于工作流引擎驳回设计
1.1 关于驳回 驳回,在有的应用中叫“回退”.驳回是中国特色的一种方式,驳回在流程图上也没有迁移线的表达经常也是隐性的,比如申请经费可能由于资料不足被驳回来补充资料,像这样的例子有非常多,也很常见. ...
- 调用BPL包中的函数
BPL就是一种DLL,DLL的EXPORTS和GETPROCADDRESS()在BPL中一样好使. 要调用BPL中的方法也和调用DLL的一样.代码略.
- iOS:改变UITableViewCell的选中背景色
要改变UITableViewCell选中时的背景色,需要在-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtInde ...
- c++ 双冒号的作用
转:原文:http://www.cnblogs.com/charley_yang/archive/2011/02/24/1964217.html #define FLY 10 #line 100 &q ...
- Hive权限之审计
因为在生产环境中大量使用hive.而hive的权限又较弱,假设可以记录全部hive操作,在增强安全性的同一时候,还可以统计hive表的使用频率:同一时候假设可以记录hql的開始和结束时间,则可以找出系 ...
- 開始学习hadoop
思前想后,还是准备自学hadoop,作为一个初级的linux学员,更不懂什么是云.hadoop仅仅知道是个框架和基础平台,详细什么玩意也得慢慢学习了解,但还是明确他的重要性.公司近期也在内部招聘这方面 ...
- 2014百度之星第二题Disk Schedule(双调欧几里得旅行商问题+DP)
Disk Schedule Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) To ...
- 《黑马程序猿》 cocos2d游戏引擎复习笔记一
/** ----------------------------游戏场景的搭建-------------------------------- 1首先创建一个surfaceview ,它能够在子线程中 ...
- Linux Framebuffer 驱动框架之一概念介绍及LCD硬件原理【转】
本文转载自:http://blog.csdn.net/liuxd3000/article/details/17464779 一.基本概念 帧缓冲(Framebuffer)是Linux系统为显示设备提供 ...