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

/*
用线段树维护区间最长连续左空串和右空串
*/
#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. 在windows下编译出linux可执行程序

    set GOARCH=amd64 set GOOS=linux go build xx.go 会生成一个没有后缀的xx二进制文件 将该文件放入linux系统某个文件夹下 赋予权限 chmod 777 ...

  2. AJPFX总结之Socket编程

    一.Socket简介 Socket是进程通讯的一种方式,即调用这个网络库的一些API函数实现分布在不同主机的相关进程之间的数据交换. 几个定义: (1)IP地址:即依照TCP/IP协议分配给本地主机的 ...

  3. #pragma使用分析

    #pragma简介 #pragma用于指示编译器完成一些特定的动作 #pragma所定义的很多指示字是编译器特有的 #pragma在不同的编译器间是不可移植的 预处理器将忽略它不认识的#pragma指 ...

  4. mysql 函数tree状

    // 子节点的查询 CREATE DEFINER = `root`@`%` FUNCTION `getDeptChildList`(rootId BIGINT) RETURNS longtext DE ...

  5. tabsGif

    tabsGif

  6. 和为S

    2518 和为S 2 秒 262,144 KB 10 分 2 级题   小b有一个01序列A,她想知道A有多少个非空连续子序列和为S. 你能帮帮她吗? 收起   输入 第一行输入一个数n,表示A的长度 ...

  7. 通过 getResources 找不到jar包中的资源和目录的解决方法

    http://my.oschina.net/sub/blog/184074 今天碰到一个怪问题: 原本跑的好好的代码,打成 jar 包就不能运行了. 问题出在,代码中有一段自动扫描 classpath ...

  8. python爬虫---从零开始(一)初识爬虫

    我们开始来谈谈python的爬虫. 1,什么是爬虫: 网络爬虫是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自动索引.模拟程序或者蠕虫.互联网犹如一个大蜘蛛 ...

  9. Sqlserver添加加字段、删除字段、修改字段类型、修改字段名、修改字段默认值

    参考:https://www.cnblogs.com/pangpanghuan/p/6432331.html 初始化表: --.添加字段 --1.1.为null alter table DataTab ...

  10. Node.js实现简单的爬取

    学习[node.js]也有几天时间了,所以打算写着练练手:索然我作为一个后端的选手,写起来还有那么一丝熟悉的感觉.emmm~~  ‘货’不多讲 ,开搞........ 首先是依赖选择: 代码块如下: ...