POJ - 3667 Hotel(线段树)
来源:互联网 发布:oracle数据库安装成功 编辑:程序博客网 时间:2024/05/21 11:01
区间合并问题。
#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <algorithm>using namespace std;#define lson l,mid,rt<<1#define rson mid+1,r,rt<<1|1const int maxn=55555;int msum[maxn<<2], lsum[maxn<<2], rsum[maxn<<2], cov[maxn<<2];void build(int l, int r, int rt){ cov[rt]=-1; msum[rt]=lsum[rt]=rsum[rt]=r-l+1; if(l==r)return ; int mid=(l+r)>>1; build(lson); build(rson);}void pushup(int rt, int m){ lsum[rt]=lsum[rt<<1]; rsum[rt]=rsum[rt<<1|1]; if(lsum[rt<<1]==m-(m>>1))lsum[rt]+=lsum[rt<<1|1]; if(rsum[rt<<1|1]==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(cov[rt]==-1)return ; cov[rt<<1]=cov[rt<<1|1]=cov[rt]; msum[rt<<1]=lsum[rt<<1]=rsum[rt<<1] = cov[rt] ? 0 : m-(m>>1); msum[rt<<1|1]=lsum[rt<<1|1]=rsum[rt<<1|1] = cov[rt] ? 0 : m>>1; cov[rt]=-1;}void update(int L, int R, int v, int l, int r, int rt){ if(L<=l && R>=r) { msum[rt]=lsum[rt]=rsum[rt] = v ? 0 : r-l+1; cov[rt]=v; return ; } int mid=(l+r)>>1; pushdown(rt, r-l+1); if(L<=mid)update(L, R, v, lson); if(R>mid)update(L, R, v, rson); pushup(rt, r-l+1);}int query(int w, int l, int r, int rt){ if(l==r)return l; int mid=(l+r)>>1; pushdown(rt, r-l+1); if(msum[rt<<1]>=w)return query(w, lson); if(rsum[rt<<1]+lsum[rt<<1|1]>=w)return mid-rsum[rt<<1]+1; return query(w, rson);}int main(){ int n, m, op, a, b; while(~scanf("%d%d", &n, &m)) { build(1, n, 1); while(m--) { scanf("%d", &op); if(op==1) { int p; scanf("%d", &a); if(a>msum[1]) { puts("0"); continue ; } printf("%d\n", p=query(a, 1, n, 1)); update(p, p+a-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-3667 Hotel[线段树]
- POJ 3667 HOTEL 线段树
- POJ 3667 Hotel (线段树)
- poj 3667 Hotel 线段树
- POJ 3667 Hotel 线段树
- poj 3667 Hotel 线段树
- POJ 3667 Hotel 线段树
- 【线段树】 POJ 3667 Hotel
- poj 3667 Hotel(线段树)
- POJ - 3667 Hotel(线段树)
- POJ 3667 Hotel (线段树)
- POJ.3667 Hotel ( 线段树 )
- poj Hotel 线段树
- POJ 3667 Hotel 线段树区间合并
- Mac Versions 破解(1.3)
- 指南针
- 君悦凯乐(文化)艺术团
- UTF8二进制数据在控制台打印成字符(C/C++)
- 使用C#格式化字符串
- POJ - 3667 Hotel(线段树)
- Android实现ListView过滤功能,继承于BaseAdapter,非ArrayAdapter。
- android 广播
- 通过itunes store向iOS设备安装测试版(未上线)的程序
- 25个有用的apt包管理命令
- 13周课后自主-项目一-(3)还是基本的数组
- iterator标签
- Python 列表
- [C++]C++ 第一章