POJ Hotel 线段树 区间合并
来源:互联网 发布:java api手机版 编辑:程序博客网 时间:2024/06/11 00:14
线段树模板题
#include <cstdio>#include <iostream>#include <algorithm>#define lson l, m, rt << 1#define rson m + 1, r, rt << 1 | 1using namespace std;const int MAX = 50000 + 5;int lsum[MAX << 2], rsum[MAX << 2], msum[MAX << 2];int cover[MAX << 2];void pushUp(int rt, int m){ lsum[rt] = lsum[rt << 1]; rsum[rt] = rsum[rt << 1 | 1]; if(lsum[rt] == m - (m >> 1)) lsum[rt] += lsum[rt << 1 | 1]; if(rsum[rt] == (m >> 1)) rsum[rt] += rsum[rt << 1]; msum[rt] = max(rsum[rt << 1] + lsum[rt << 1 | 1], max(msum[rt << 1], msum[rt << 1 | 1]));}void pushDown(int rt, int m){ if(cover[rt] != -1){ cover[rt << 1] = cover[rt << 1 | 1] = cover[rt]; msum[rt << 1] = rsum[rt << 1] = lsum[rt << 1] = cover[rt] ? 0 : m - (m >> 1); msum[rt << 1 | 1] = rsum[rt << 1 | 1] = lsum[rt << 1 | 1] = cover[rt] ? 0 : (m >> 1); cover[rt] = -1; }}void build(int l, int r, int rt){ msum[rt] = lsum[rt] = rsum[rt] = r - l + 1; cover[rt] = -1; if(r == l) return; int m = (l + r) >> 1; build(lson); build(rson);}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 ? 0 : r - l + 1; cover[rt] = c; return; } pushDown(rt, r - l + 1); int m = (r + l) >> 1; if(L <= m) update(L, R, c, lson); if(m < R) update(L, R, c, rson); pushUp(rt, r - l + 1);}int query(int w, int l, int r, int rt){ if(l == r) return l; pushDown(rt, r - l + 1); int m = (l + r) >> 1; if(msum[rt << 1] >= w) return query(w, lson); else if(rsum[rt << 1] + lsum[rt << 1 | 1] >= w) return m - rsum[rt << 1] + 1; return query(w, rson);}int main(){ int n, m, ca, a, b, w; while(~scanf("%d%d", &n, &m)) { build(1, n, 1); while(m--) { scanf("%d", &ca); if(ca == 1){ scanf("%d", &w); if(msum[1] < w) printf("0\n"); else { int l = query(w, 1, n, 1); printf("%d\n", l); update(l, l + w - 1, 1, 1, n, 1); } } else { scanf("%d%d", &a, &b); update(a, a + b - 1, 0, 1, n, 1); } } } return 0;}
0 0
- POJ 3667 Hotel 线段树区间合并
- poj 3667 Hotel 线段树区间合并
- POJ 3667 Hotel 线段树 区间合并
- Poj 3667 Hotel 线段树 区间合并
- POJ Hotel 线段树 区间合并
- POJ 3667-hotel(线段树区间合并)
- Hotel+POJ+线段树区间合并
- POJ 3667 Hotel. (线段树 区间合并)
- 【线段树】POJ 3667 Hotel 区间合并
- [POJ 1823] Hotel 线段树区间合并
- POJ 3667 Hotel ( 线段树区间合并 )
- 线段树 区间合并 poj 3667 Hotel
- POJ 3667 Hotel 线段树 区间合并
- POJ - 3667 Hotel (线段树 + 区间合并)
- POJ 3667 Hotel 【线段树 区间合并】
- poj 3667 Hotel 【线段树区间合并】
- POJ 3667Hotel 线段树区间合并
- POJ 3667 - Hotel(线段树+区间合并)
- C语言static变量和全局变量的使用
- hadoop个人笔记,仅供自己参考
- 良好的思维习惯让你更聪明
- hdu-1716 排列2(STL函数库运用)
- 最大连续子数组(分治法、动态规划)
- POJ Hotel 线段树 区间合并
- Hide Ribbon With Users Permissions
- FreeBSD
- 深入浅出AT命令(4)-电话本相关命令
- iframe做上传和读取数据
- GPS名词解析
- Perceptron Learing Algorithm (PLA )matlab 实现
- 在项目中使用最新的ckeditor4.3.1的全过程+增加自己的上传本地图片按钮及将上传图片返回、保存
- GPS工作原理