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

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. 【iOS发展-70】点菜系统案例:使用文本框inputView和inputAccessoryView串联UIPickerView、UIDatePicker和UIToolBar

    (1)效果 (2)先在storyboard中设计界面,然后源码(直接在ViewController中码) #import "ViewController.h" @interface ...

  2. 【Head First Javascript】学习笔记0——自己制作chm参考手册素材

    变量声明:var 常量声明:const 数据格式转换: 1.转换函数 parseInt(A):把字符串A转换成整数:其中A为只包含数字的字符串 parseFloat(A):把字符串A转换成浮点数:其中 ...

  3. swift 注意事项 (十六) —— 可选链

    可选链(Optional Chaining) 我们都知道"可选型"是什么.那么可选链又是什么,举个样例解释一下: struct MyName{      var name } st ...

  4. Cocos2d-android游戏引擎-介绍

    一.游戏引擎概念 什么是游戏引擎       游戏引擎是指一些已编写好的可编辑游戏系统或者一些交互式实时图像应用程序的核心组件.这些系统为游戏设计者提供各种编写游戏所需的各种工具,其目的在于让游戏设计 ...

  5. HDU 1385 Minimum Transport Cost 最短路径题解

    本题就是使用Floyd算法求全部路径的最短路径,并且须要保存路径,并且更进一步须要依照字典顺序输出结果. 还是有一定难度的. Floyd有一种非常巧妙的记录数据的方法,大多都是使用这种方法记录数据的. ...

  6. struts2文件下载 <result type="stream">

    <!--struts.xml配置--> <action name="download" class="com.unmi.action.DownloadA ...

  7. Postman (Chrome插件)

    接口测试从未如此简单 - Postman (Chrome插件) Posted on 2015-01-16 15:50 WadeXu 阅读(468) 评论(7) 编辑 收藏 接口测试从未如此简单 - P ...

  8. installshield 32位打包和64位打包的注意事项

    原文:installshield 32位打包和64位打包的注意事项 32/64位问题要把握几点:1. 明确你的产品是否需要区分32/64位2. 明确你的产品中是否有32/64位的服务注册3. 了解In ...

  9. Android学习笔记:Home Screen Widgets(1):大约Widget

    什么是Home Screen Widgets Home screen Widget即称为小工具或者中文小工具,是显示在主页上的views,通过后台进程更新view的数据. Android由AppWid ...

  10. JDK-windows7环境变量配置-亲测版本 以及HelloWorld

    1.下载并安装jdk,假设安装1.6.0_45版本到C:\Program Files\Java,则安装完毕后,目录结构为: C:\PROGRAM FILES\JAVA├─jdk1.6.0_45│ ├─ ...