考试前深陷分块泥潭所以刚开始以为是分块。

然而这题数据水到暴力卡常都能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)的更多相关文章

  1. 1593: [Usaco2008 Feb]Hotel 旅馆

    1593: [Usaco2008 Feb]Hotel 旅馆 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 391  Solved: 228[Submit ...

  2. bzoj1593 [Usaco2008 Feb]Hotel 旅馆(线段树)

    1593: [Usaco2008 Feb]Hotel 旅馆 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 758  Solved: 419[Submit ...

  3. Hotel 旅馆, 线段树查询,合并

    C. Hotel 旅馆 内存限制:256 MiB 时间限制:1000 ms 标准输入输出 题目类型:传统 评测方式:文本比较   题目描述 OIER最近的旅游计划,是到长春净月潭,享受那里的湖光山色, ...

  4. BZOJ 1593: [Usaco2008 Feb]Hotel 旅馆

    Description 奶牛们最近的旅游计划,是到苏必利尔湖畔,享受那里的湖光山色,以及明媚的阳光.作为整个旅游的策划者和负责人,贝茜选择在湖边的一家著名的旅馆住宿.这个巨大的旅馆一共有N (1 &l ...

  5. 线段树||BZOJ1593: [Usaco2008 Feb]Hotel 旅馆||Luogu P2894 [USACO08FEB]酒店Hotel

    题面:P2894 [USACO08FEB]酒店Hotel 题解:和基础的线段树操作差别不是很大,就是在传统的线段树基础上多维护一段区间最长的合法前驱(h_),最长合法后驱(t_),一段中最长的合法区间 ...

  6. 【bzoj1593】[Usaco2008 Feb]Hotel 旅馆 线段树区间合并

    题目描述 奶牛们最近的旅游计划,是到苏必利尔湖畔,享受那里的湖光山色,以及明媚的阳光.作为整个旅游的策划者和负责人,贝茜选择在湖边的一家著名的旅馆住宿.这个巨大的旅馆一共有N (1 <= N & ...

  7. 【BZOJ】1593: [Usaco2008 Feb]Hotel 旅馆

    [算法]线段树(经典线段树上二分) [题意]n个房间,m个询问,每次订最前的连续x个的空房间,或退订从x开始y个房间,求每次订的最左房间号. [题解]关键在于找连续x个空房间,经典二分. 线段树标记s ...

  8. 【最长连续零 线段树】bzoj1593: [Usaco2008 Feb]Hotel 旅馆

    最长连续零的线段树解法 Description 奶牛们最近的旅游计划,是到苏必利尔湖畔,享受那里的湖光山色,以及明媚的阳光.作为整个旅游的策划者和负 责人,贝茜选择在湖边的一家著名的旅馆住宿.这个巨大 ...

  9. BZOJ1593 [Usaco2008 Feb]Hotel 旅馆

    裸上线段树,就是记的东西有点多... 每个点记区间左端最长0,右端最长0,中间最长0,和tag表示是否全为0/1 直接更新就好,查询的时候先查左儿子,然后查中间,最后查右儿子... /******** ...

随机推荐

  1. [cf 599C] Day at the Beach

    题意:有n个数,将其分组使整个数列排序后每组中的数仍在该组中,求最多的分组数. 代码很易懂 #include <iostream> #include <algorithm> # ...

  2. C. Vladik and Memorable Trip DP

    C. Vladik and Memorable Trip time limit per test 2 seconds memory limit per test 256 megabytes input ...

  3. F2BPM 开发Api与RESTfull应用服务Api 层次关系及示例

    目前越来越多的企业架构解决方案更加趋向于基于http协议“微服务”访问跨系统调用,而不使用统传的WebService调用,即通过RESTfull方式进行交互,更加轻量整合调用更加方便.本文档中所有F2 ...

  4. PHP array_diff()

    定义和用法 array_diff() 函数返回两个数组的差集数组.返回的数组的元素都取自被比较的数组(既第一个数组). 在返回的数组中,键名保持不变. 语法 array_diff(array1,arr ...

  5. Android Studio第一次启动的Fetching android sdk component information的问题

    1)进入刚安装的Android Studio文件夹下的bin文件夹.找到idea.properties文件,用文本编辑器打开. 2)在idea.properties文件末尾加入一行: disable. ...

  6. Android Gallery2源代码分析

    打开图库中图片为什么从模糊变清晰 1. 有一点要明白,图片要进行显示,首先要先将图片进行decode,然后才干显示 2. 图片decode须要时间,越大的图片,细节越多的图片,那么它decode时间就 ...

  7. vbs socket

    http://www.bathome.net/thread-423-1-1.html http://files.cnblogs.com/files/developer-ios/mswinsck.ocx ...

  8. js面试题--------JS中数字和字符,布尔类型相加相减问题

    JS中数字和字符相加相减问题 <html lang="en"> <head> <meta charset="utf-8" /> ...

  9. 用MJExtension简化MVC

    首先引入MJExtension框架 模型 #import <Foundation/Foundation.h> @interface FundsModel : NSObject /** * ...

  10. 没调出来 P2023

    #include<iostream> #include<cstdio> #include<cstring> #define ll long long #define ...