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;
}
转载于:https://www.cnblogs.com/Rorschach-XR/p/10969171.html
Hotel 旅馆 题解(From luoguBlog)相关推荐
- 1593: [Usaco2008 Feb]Hotel 旅馆
1593: [Usaco2008 Feb]Hotel 旅馆 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 489 Solved: 272 [Subm ...
- bzoj1593 [Usaco2008 Feb]Hotel 旅馆(线段树)
1593: [Usaco2008 Feb]Hotel 旅馆 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 758 Solved: 419 [Subm ...
- 线段树||BZOJ1593: [Usaco2008 Feb]Hotel 旅馆||Luogu P2894 [USACO08FEB]酒店Hotel
题面:P2894 [USACO08FEB]酒店Hotel 题解:和基础的线段树操作差别不是很大,就是在传统的线段树基础上多维护一段区间最长的合法前驱(h_),最长合法后驱(t_),一段中最长的合法区间 ...
- 【线段树区间合并】BZOJ1593-[Usaco2008 Feb]Hotel 旅馆
好无聊,以前写过没什么好讲的,水过.戳 1 #include<iostream> 2 #include<cstdio> 3 #include<cstdlib> 4 ...
- Java设计模式-适配器模式Adapter
定义:"转换接口" 将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作. 我理解的"一个类的接口&q ...
- noip2017考前整理(未完)
快考试了,把我以前写过的题回顾一下. Noip2007 树网的核:floyd,推出性质,暴力. Noip2008 笨小猴:模拟 Noip2008 火柴棒等式:枚举 Noip2008 传纸条:棋盘dp ...
- 国外生活必备的英文词汇
餐具: coffee pot 咖啡壶 coffee cup 咖啡杯 paper towel 纸巾 napkin 餐巾 table cloth 桌布 tea -pot 茶壶 tea set 茶具 tea ...
- 学习1368个单词 - 有关物和人的名词
最近闲来无事.想提升自己一下.先来张图镇一下 本篇文章主要记录一些分类的单词,用于之后的查阅,单词来自<1368个单词就够了>- 王了平,有时间的朋友可以去看看.学习英语的好处就不多说的, ...
- [词根词缀]greg/hap/helio及词源G与H的故事
本博文源于刘洪波老师的<英文词根词缀精讲>. greg = herd 群,成群 来源于拉丁文grex,"herd,flock" gregarious adj.爱社交的 ...
- 适配器模式 《转》
现实生活中的适配器 本文讨论适配器模式.适配器模式是23中设计模式之一,它的主要作用是在新接口和老接口之间进行适配.它非常像我们出国旅行时带的电源转换器.为了举这个例子,我还特意去京东上搜了一下电源转 ...
最新文章
- linux 常见试题(2)-选择
- ASP.NET Core 中使用IHttpClientFactory发出HTTP请求
- 全球孩子迷恋手机/iPad,其实罪魁祸首是父母!
- 【解决问题】useBean类属性[com.cheng.pojo.People]的值无效导致HTTP500问题
- leetcode80. 删除排序数组中的重复项 II
- leetcode917
- 用run as以管理员权限运行脚本的方法
- 只“存活”9个月:Ubuntu 15.10今日停止支持
- 马斯克:如果我不担任CEO 特斯拉就会完蛋
- #控制台大学课堂点名问题_草率了!大学课堂点名新招数来袭,逃课的一个也没有躲过...
- Fiddler请求过滤
- java 单行文本_Java Swing界面编程(17)---单行文本输入组件:JTextField
- 如何让计算机系统恢复默认字体,Win10修改系统字体后怎么还原系统默认字体?
- VSCode使用TSLlint校验TS代码
- 宏转录组方法_土壤宏转录组RNA的提取方法评价
- 背英语单词词根词缀的重要性
- Swift 函数的定义及调用
- Silane-PEG-NH2 氨基聚乙二醇硅烷 NH2-PEG-Silane结构式
- 终于明白什么是VoLTE,以及VoIP、CSFB、SIP、IMS...
- 建设“东数西算”工程的实施办法以及背后价值