题意:询问区间最长连续空串

/*
用线段树维护区间最长连续左空串和右空串
*/
#include<cstdio>
#include<iostream>
#define N 50010
using namespace std;
int sum[N*],lsum[N*],rsum[N*],cover[N*],n,m;
void push_up(int k,int l,int r){
int mid=l+r>>;
sum[k]=max(max(sum[k*],sum[k*+]),rsum[k*]+lsum[k*+]);
lsum[k]=lsum[k*];
if(lsum[k*]==mid-l+) lsum[k]+=lsum[k*+];
rsum[k]=rsum[k*+];
if(rsum[k*+]==r-mid) rsum[k]+=rsum[k*];
}
void push_down(int k,int l,int r){
if(!cover[k]) return;
int mid=l+r>>;
if(cover[k]==-){
lsum[k*]=rsum[k*]=sum[k*]=;
lsum[k*+]=rsum[k*+]=sum[k*+]=;
cover[k*]=cover[k*+]=-;
}
else {
lsum[k*]=rsum[k*]=sum[k*]=mid-l+;
lsum[k*+]=rsum[k*+]=sum[k*+]=r-mid;
cover[k*]=cover[k*+]=;
}
cover[k]=;
}
void build(int l,int r,int k){
if(l==r){
cover[k]=;
lsum[k]=rsum[k]=sum[k]=;
return;
}
int mid=l+r>>;
build(l,mid,k*);
build(mid+,r,k*+);
push_up(k,l,r);
}
int query(int l,int r,int k,int x){
if(l==r)return l;
push_down(k,l,r);
int mid=l+r>>;
if(sum[k*]>=x)return query(l,mid,k*,x);
else if(rsum[k*]+lsum[k*+]>=x) return mid-rsum[k*]+;
else return query(mid+,r,k*+,x);
}
void change(int l,int r,int k,int c,int x,int y){
if(l>=x&&r<=y){
cover[k]=c;
lsum[k]=rsum[k]=sum[k]=c==-?:r-l+;
return;
}
push_down(k,l,r);
int mid=l+r>>;
if(x<=mid) change(l,mid,k*,c,x,y);
if(y>mid) change(mid+,r,k*+,c,x,y);
push_up(k,l,r);
}
int main(){
scanf("%d%d",&n,&m);
build(,n,);
for(int i=;i<=m;i++){
int opt,x,y;scanf("%d",&opt);
if(opt==){
scanf("%d",&x);
if(sum[]<x){
printf("0\n");
continue;
}
int p=query(,n,,x);
printf("%d\n",p);
change(,n,,-,p,p+x-);
}
else {
scanf("%d%d",&x,&y);
change(,n,,,x,x+y-);
}
}
return ;
}

Hotel(poj 3667)的更多相关文章

  1. POJ 3667 Hotel(线段树)

    POJ 3667 Hotel 题目链接 题意:有n个房间,如今有两个操作 1.找到连续长度a的空房间.入住,要尽量靠左边,假设有输出最左边的房间标号,假设没有输出0 2.清空[a, a + b - 1 ...

  2. 01背包问题:Charm Bracelet (POJ 3624)(外加一个常数的优化)

    Charm Bracelet    POJ 3624 就是一道典型的01背包问题: #include<iostream> #include<stdio.h> #include& ...

  3. Scout YYF I(POJ 3744)

    Scout YYF I Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5565   Accepted: 1553 Descr ...

  4. 广大暑假训练1(poj 2488) A Knight's Journey 解题报告

    题目链接:http://vjudge.net/contest/view.action?cid=51369#problem/A   (A - Children of the Candy Corn) ht ...

  5. Games:取石子游戏(POJ 1067)

    取石子游戏 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 37662   Accepted: 12594 Descripti ...

  6. BFS 或 同余模定理(poj 1426)

    题目:Find The Multiple 题意:求给出的数的倍数,该倍数是只由 1与 0构成的10进制数. 思路:nonzero multiple  非零倍数  啊. 英语弱到爆炸,理解不了题意... ...

  7. 并查集+关系的传递(poj 1182)

    题目:食物链 题意:给定一些关系.判断关系的正确性,后给出的关系服从之前的关系: 思路:难点不在并查集,在于关系的判断,尤其是子节点与根节点的关系的判断: 这个关系看似没给出,但是给出子节点与父节点的 ...

  8. 昂贵的聘礼(poj 1062)

    Description 年轻的探险家来到了一个印第安部落里.在那里他和酋长的女儿相爱了,于是便向酋长去求亲.酋长要他用10000个金币作为聘礼才答应把女儿嫁给他.探险家拿不出这么多金币,便请求酋长降低 ...

  9. Collecting Bugs(POJ 2096)

    Collecting Bugs Time Limit: 10000MS   Memory Limit: 64000K Total Submissions: 3064   Accepted: 1505 ...

随机推荐

  1. 009全志R16平台tinav3.0下编译不过的问题

    009全志R16平台tinav3.0下编译不过的问题 2018/11/13 11:39 版本:V1.0 开发板:SC3817R SDK:tina v3.0 1.01原始编译全志r16平台tinav3. ...

  2. 找不到draw9patch.bat?已经不用找了

    Google 已经因为 draw9patch 热门的原因,把它集成在 Android Studio 里面了, 你现在可以直接在 Android Studio 里直接打开编辑了.

  3. The lion king 经典句型摘录

    What am I going to do with him? Everything the light touches is our kingdom. But I thought a king ca ...

  4. JAVA之NIO按行读取大文件

    做项目过程中遇到要解析100多M的TXT文件,并入库.用之前的FileInputStream.BufferedReader显然不行了,虽然readLine这方法可以直接按行读取,但是去读一个140M左 ...

  5. 在Servlet中使用@Autowire的方法

    在你调用的Servlet中添加如下代码: public void init(ServletConfig config) { try { super.init(config); SpringBeanAu ...

  6. DROP SEQUENCE - 删除一个序列

    SYNOPSIS DROP SEQUENCE name [, ...] [ CASCADE | RESTRICT ] DESCRIPTION 描述 DROP SEQUENCE 从数据库中删除序列号生成 ...

  7. render_to_response()

    render_to_response('模板名称',字典) 字典:第二个参数必须是为该模板创建context时所使用的字典,如果不提供第二个参数,render_response()使用一个空字典

  8. source 1.7 中不支持 lambda 表达式(请使用 -source 8 或更高版本以启用 lambda 表达式)

    from:http://blog.csdn.net/qwdafedv/article/details/54691740 https://www.youtube.com/watch?v=oXxijdf8 ...

  9. excel数据比对,查找差异

    1.选中需比对的数据 2.开始->条件格式->突出显示单元格规则->重复值 3.选择唯一值,点击确定 4.结果展示 5.颜色标识的即:不同值

  10. JavaScript设计模式基础之面向对象的JavaScript(二)

    多态 多态的实际含义:同一操作作用与不同的对象上面,可以产生不同的解释和不同的执行结果,就是说,给不同的对象发送同一个消息 的时候,这些对象会根据这个消息分别给出不同的反馈 代码如下: class D ...