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 直接更新就好,查询的时候先查左儿子,然后查中间,最后查右儿子... /******** ...
随机推荐
- 1414 冰雕 51nod 暴力
1414 冰雕 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 关注 白兰大学正在准备庆祝成立256周年.特别任命副校长 ...
- Spring MVC-控制器(Controller)-参数方法名称解析器(Parameter Method Name Resolver )示例(转载实践)
以下内容翻译自:https://www.tutorialspoint.com/springmvc/springmvc_parametermethodnameresolver.htm 说明:示例基于Sp ...
- [MongoDB]mongo命令行工具
1.use dbname 自动创建 2.db.user.find() 空 show collections 空 show dbs 3.db.user.save({name:'',age:20}) db ...
- linux UID,GID,EUID,EGID,SUID,SGID
SUID, SGID, sticky位可以参考: http://onlyzq.blog.51cto.com/1228/527247/ SUID属性只能运用在可执行文件上,当用户执行该执行文件时,会临时 ...
- OllyDbg 使用笔记 (七)
OllyDbg 使用笔记 (七) 參考 书:<加密与解密> 视频:小甲鱼 解密系列 视频 演示样例程序下载:http://pan.baidu.com/s/1gvwlS 暴力破解 观察这个程 ...
- Python帮助函数调试函数 用于获取对象的属性及属性值
Python帮助函数调试函数 用于获取对象的属性及属性值 刚接触Python,上篇 <Python入门>第一个Python Web程序--简单的Web服务器 中调试非常不方便,不知道对象详 ...
- ant+jmeter中build.xml配置详解
- 使用OpenCV滑动条写成的简单调色器,实时输出RGB值
好久没有写博客了,近期在看OpenCV.于是动手写了个简单的RGB调色器,在终端实时输出RGB的值.通过这个程序学习滑动条的使用.程序中主要用到cvCreateTrackbar ,其使用方法例如以下: ...
- Linux C语言头文件搜索路径
本文介绍在linux中头文件的搜索路径,也就是说你通过include指定的头文件,linux下的gcc编译器它是怎么找到它的呢.在此之前,先了解一个基本概念. 头文件是一种文本文件,使用文本编辑器将代 ...
- 【POJ 1475】 Pushing Boxes
[题目链接] http://poj.org/problem?id=1475 [算法] 双重BFS [代码] #include <algorithm> #include <bitset ...