两个题目都是用同一个模板,询问最长的连续未覆盖的区间 。

lazy代表是否有人,msum代表区间内最大的连续长度,lsum是从左结点往右的连续长度,rsum是从右结点往左的连续长度。

区间合并很恶心啊,各种左左右右左右左右........

#include <cstdio>
#include <iostream>
#include <cstring>
#include <cmath>
# define MAX 211111
# define ll(x) x << 1
# define rr(x) x << 1 | 1
using namespace std;
struct node {
int l,r,mid,lazy;
int msum,lsum,rsum; } tree[MAX*4]; void up(int x) {
int p = tree[x].r - tree[x].l + 1;
tree[x].msum = max(tree[rr(x)].lsum + tree[ll(x)].rsum, max(tree[ll(x)].msum, tree[rr(x)].msum));
tree[x].lsum = tree[ll(x)].lsum;
tree[x].rsum = tree[rr(x)].rsum;
if(tree[x].lsum == p - (p >> 1)) tree[x].lsum += tree[rr(x)].lsum;
if(tree[x].rsum == (p >> 1)) tree[x].rsum += tree[ll(x)].rsum;
}
void down (int x) {
int p = tree[x].r - tree[x].l + 1;
if(tree[x].lazy != -1) {
tree[ll(x)].lazy = tree[rr(x)].lazy = tree[x].lazy;
tree[ll(x)].lsum = tree[ll(x)].rsum = tree[ll(x)].msum = tree[x].lazy ? 0 : p - (p>>1);
tree[rr(x)].lsum = tree[rr(x)].rsum = tree[rr(x)].msum = tree[x].lazy ? 0 : (p>>1);
tree[x].lazy = -1;
}
} void build(int l,int r,int x) {
tree[x].l = l;
tree[x].r = r;
tree[x].mid = (l+r) >> 1;
tree[x].lazy = -1;
tree[x].lsum = tree[x].rsum = tree[x].msum = r - l + 1;
if(l == r) {
return ;
}
build(l,tree[x].mid,ll(x));
build(tree[x].mid+1,r,rr(x));
} void update(int l,int r,int v,int x) {
if(l == tree[x].l && r == tree[x].r) {
tree[x].msum = tree[x].lsum = tree[x].rsum = v ? 0: tree[x].r - tree[x].l + 1;
tree[x].lazy = v;
return ;
}
down(x);
if(r <= tree[x].mid ) update(l,r,v,ll(x));
else if(l > tree[x].mid) update(l,r,v,rr(x));
else {
update(l,tree[x].mid,v,ll(x));
update(tree[x].mid + 1,r,v,rr(x));
}
up(x);
} int query(int v,int x) {
if(tree[x].l == tree[x].r) return tree[x].l;
down(x);
if(tree[ll(x)].msum >= v) return query(v,ll(x));
else if(tree[ll(x)].rsum + tree[rr(x)].lsum >= v) return tree[x].mid - tree[ll(x)].rsum + 1;
else {
return query(v,rr(x));
}
} int main() { return 0;
}

POJ 3667 & 1823 Hotel (线段树区间合并)的更多相关文章

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

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

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

    题目链接:http://poj.org/problem?id=3667 最初给你n间空房,m个操作: 操作1 a 表示检查是否有连续的a间空房,输出最左边的空房编号,并入住a间房间. 操作2 a b ...

  3. POJ 2750 Potted Flower (线段树区间合并)

    开始懵逼找不到解法,看了网上大牛们的题解才发现是区间合并...  给你n个数形成一个数列环,然后每次进行一个点的修改,并输出这个数列的最大区间和(注意是环,并且区间最大只有n-1个数) 其实只需要维护 ...

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

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

  5. Poj 3667——hotel——————【线段树区间合并】

    Hotel Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 13124   Accepted: 5664 Descriptio ...

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

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

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

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

  8. POJ 2482 Stars in Your Window (线段树区间合并+扫描线)

    这题开始一直被矩形框束缚了,想法一直都是枚举线,但是这样枚举都需要O(n^2)...但是看了别人的思路,感觉这题思想真心很好(PS:开头好浪漫的描述啊,可惜并没有什么用)  题意就是在平面上给你一些星 ...

  9. poj-3667(线段树区间合并)

    题目链接:传送门 参考文章:传送门 思路:线段树区间合并问题,每次查询到满足线段树的区间最左值,然后更新线段树. #include<iostream> #include<cstdio ...

随机推荐

  1. sql server中的索引详情

    什么是索引 拿汉语字典的目录页(索引)打比方:正如汉语字典中的汉字按页存放一样,SQL Server中的数据记录也是按页存放的,每页容量一般为4K .为了加快查找的速度,汉语字(词)典一般都有按拼音. ...

  2. CSharp设计模式读书笔记(19):备忘录模式(学习难度:★★☆☆☆,使用频率:★★☆☆☆)

    备忘录模式(Memento Pattern):在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态.它是一种对象行为型模式,其别名为Tok ...

  3. Swift语言指南(五)--数字字面量和数字类型转换

    原文:Swift语言指南(五)--数字字面量和数字类型转换 数字字面量 整数字面量写法如下: · 十进制数,无前缀 · 二进制数,以 0b 为前缀 · 八进制数,以 0o 为前缀 · 十六进制数,以 ...

  4. C#-面向对象的多态思想 ---ShinePans

    总结: 多态是面向对象的核心.---------能够理解为一个方法,多种实现, 在这里能够用虚方法,抽象类,接口能够实现多态 1.首先利用接口来实现多态: 接口相当于"功能,"接口 ...

  5. (转)迎接 Entity Framework 7

    对实体框架的下一版本的开发正在顺利进行中.我在 2014 年度北美 TechEd 上第一次了解 EF 团队的工作内容,当时项目经理 Rowan Miller 讨论了 Entity Framework ...

  6. 在windows下用C语言写socket通讯实例

    原文:在windows下用C语言写socket通讯实例 From:Microsoft Dev Center #undef UNICODE #define WIN32_LEAN_AND_MEAN #in ...

  7. ORACLE PL/SQL编程之八:把触发器说透

    原文:ORACLE PL/SQL编程之八:把触发器说透 ORACLE PL/SQL编程之八: 把触发器说透 大家一定要评论呀,感谢!光发表就花了我将近一个下午. 本篇主要内容如下: 8.1 触发器类型 ...

  8. 输入 URL 到页面完成加载过程中的所有发生的事情?

    转到浏览器中输入URL给你一个页面后,.有些事情,你每天都在使用,学的是计算机网络知道是怎么回事.DNS解析然后页面的回馈,只是要讲好还是有难度. 之前fex团队的nwind专门写过这个问题的博客: ...

  9. uml系列(四)——类图

    类图是uml的核心.学习类图,总共须要掌握三个部分:类:类之间的关系:类图怎么画. 首先,类.老规矩,先来张图. 类是什么:举个简单的样例:猫.狗.猪三个都是动物.这里面的"动物" ...

  10. Solr多核心及分词器(IK)配置

    Solr多核心及分词器(IK)配置   多核心的概念 多核心说白了就是多索引库.也可以理解为多个"数据库表" 说一下使用multicore的真实场景,比若说,产品搜索和会员信息搜索 ...