好无聊,以前写过没什么好讲的,水过。

 #include<iostream>
#include<cstdio>
#include<cstdlib>
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define root 1
using namespace std;
const int MAXN=+;
int n,m;
int lsum[MAXN<<],rsum[MAXN<<],msum[MAXN<<];
int cover[MAXN<<];//区间覆盖 void pushdown(int l,int r,int rt)
{
int mid=(l+r)>>;
if (cover[rt]!=-)
{
cover[rt<<]=cover[rt<<|]=cover[rt];
if (cover[rt]==)
lsum[rt<<]=lsum[rt<<|]=rsum[rt<<]=rsum[rt<<|]=msum[rt<<]=msum[rt<<|]=;
else
{
lsum[rt<<]=rsum[rt<<]=msum[rt<<]=mid-l+;
lsum[rt<<|]=rsum[rt<<|]=msum[rt<<|]=r-mid;
}
cover[rt]=-;
}
} void pushup(int l,int r,int rt)
{
int mid=(l+r)>>;
lsum[rt]=lsum[rt<<];
if (lsum[rt<<]==(mid-l+)) lsum[rt]+=lsum[rt<<|];
rsum[rt]=rsum[rt<<|];
if (rsum[rt<<|]==(r-mid)) rsum[rt]+=rsum[rt<<];
msum[rt]=max(rsum[rt<<]+lsum[rt<<|],max(msum[rt<<],msum[rt<<|]));
} void update(int L,int R,int c,int l,int r,int rt)
{
if (L<=l && r<=R)
{
msum[rt]=lsum[rt]=rsum[rt]=c? :(r-l+);
cover[rt]=c;
return;
}
pushdown(l,r,rt);
int mid=(l+r)>>;
if (L<=mid) update(L,R,c,lson);
if (mid<R) update(L,R,c,rson);
pushup(l,r,rt);
} int query(int q,int l,int r,int rt)
{
if (l==r) return l;
pushdown(l,r,rt);
int mid=(l+r)>>;
if (msum[rt<<]>=q) return(query(q,lson));
if (rsum[rt<<]+lsum[rt<<|]>=q) return(mid-rsum[rt<<]+);
return (query(q,rson));
} void build(int l,int r,int rt)
{
lsum[rt]=rsum[rt]=msum[rt]=r-l+;
cover[rt]=-;
if (l==r) return;
int mid=(l+r)>>;
build(lson);
build(rson);
} void solve()
{
build(,n,);
for (int i=;i<m;i++)
{
int op,d,x;
scanf("%d",&op);
if (op==)
{
scanf("%d",&d);
if (msum[root]<d) puts("");
else
{
x=query(d,,n,);
printf("%d\n",x);
update(x,x+d-,,,n,);
}
}
else
{
scanf("%d%d",&x,&d);
update(x,x+d-,,,n,);
}
}
} int main()
{
scanf("%d%d",&n,&m);
solve();
return ;
}

【线段树区间合并】BZOJ1593-[Usaco2008 Feb]Hotel 旅馆的更多相关文章

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

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

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

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

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

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

  4. BZOJ1593 [Usaco2008 Feb]Hotel 旅馆

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

  5. 【分块】bzoj1593 [Usaco2008 Feb]Hotel 旅馆

    分块,记录每个块内包括左端点的最大连续白段的长度, 整个块内的最大连续白段的长度, 和包括右端点的最大连续白段的长度. Because 是区间染色,所以要打标记. 至于怎样在O(sqrt(n))的时间 ...

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

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

  7. POJ 3667 Hotel(线段树 区间合并)

    Hotel 转载自:http://www.cnblogs.com/scau20110726/archive/2013/05/07/3065418.html [题目链接]Hotel [题目类型]线段树 ...

  8. 线段树(区间合并) POJ 3667 Hotel

    题目传送门 /* 题意:输入 1 a:询问是不是有连续长度为a的空房间,有的话住进最左边 输入 2 a b:将[a,a+b-1]的房间清空 线段树(区间合并):lsum[]统计从左端点起最长连续空房间 ...

  9. poj3667 Hotel (线段树 区间合并)

    poj3667 HotelTime Limit: 3000MS Memory Limit: 65536KTotal Submissions: 18925 Accepted: 8242Descripti ...

随机推荐

  1. C++之编译器与链接器工作原理

    原文来自:http://blog.sina.com.cn/s/blog_5f8817250100i3oz.html 这里并没不是讨论大学课程中所学的<编译原理>,只是写一些我自己对C++编 ...

  2. Git常规配置与基本用法

    Git环境配置 一. 全局配置 1. 配置文件 git全局配置文件.gitconfig默认在当前系统用户文件夹下,window可运行%USERPROFILE%查找,Mac系统在cd ~查找. 具体配置 ...

  3. macaca安装失败的解决办法!

    https://github.com/macacajs/macaca-android https://www.jianshu.com/p/76a5be6c1036

  4. core dump使用方法、设置、测试用例

    core dump使用方法.设置.测试用例 http://blog.csdn.net/liuzhuchen/article/details/21975227

  5. c++ ui 库

    Dulib 比较流行的direct ui 界面框架 UIStone 据说金山词霸用着,查询资料甚少 DirectUI qq使用了据说,多学习学习吧 基于directUI的dulib不错 c盘没空间,运 ...

  6. sicily 1059. Exocenter of a Trian

    Description Given a triangle ABC, the Extriangles of ABC are constructed as follows: On each side of ...

  7. 图论-最小生成树-Kruskal算法

    有关概念: 最小生成树:在连通图G中,连接图G所有顶点且总权最小的边构成的树 思路: 首先对边按权从小到大排序,紧接着枚举每一条边,如果两个结点的祖先结点不同(并查集),则连上此边,直到边数等于结点数 ...

  8. 2017多校第7场 HDU 6129 Just do it 找规律

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6129 题意:求a序列后m次xor前缀和 解法: 手动对1位置对每个位置的贡献打表发现 第一次 贡献为 ...

  9. MySQL:按后缀缀批量删除表格

    Select CONCAT( 'drop table ', table_name, ';' ) FROM information_schema.tables Where table_schema='s ...

  10. mui 怎样监听scroll事件的滚动距离

    var scroll = mui('.mui-scroll-wrapper').scroll(); document.querySelector('.mui-scroll-wrapper' ).add ...