poj 2892 &&hdu 1540 Tunnel Warfare
2014-02-20 10:17
459 查看
http://poj.org/problem?id=2892
View Code
#include <cstdio> #include <cstring> #include <algorithm> #define maxn 51000 using namespace std; int stack1[maxn],top; struct node { int l,r; int len,ren; }p[maxn*4]; void up(int i) { p[i].len=p[i<<1].len; p[i].ren=p[i<<1|1].ren; if(p[i<<1].len==(p[i<<1].r-p[i<<1].l+1)) p[i].len+=p[i<<1|1].len; if(p[i<<1|1].ren==(p[i<<1|1].r-p[i<<1|1].l+1)) p[i].ren+=p[i<<1].ren; } void build_tree(int i,int l,int r) { p[i].l=l; p[i].r=r; if(l==r) { p[i].len=p[i].ren=1; return ; } int mid=(l+r)>>1; build_tree(i<<1,l,mid); build_tree(i<<1|1,mid+1,r); up(i); } void update(int id,int i,int oper) { if(p[i].l==p[i].r) { p[i].len=p[i].ren=oper; return; } int mid=(p[i].l+p[i].r)>>1; if(id<=mid) update(id,i<<1,oper); else update(id,i<<1|1,oper); up(i); } int search1(int id,int i) { if(p[i].l==p[i].r) return p[i].len; int mid=(p[i].l+p[i].r)>>1; if(id<=mid) { if(p[i<<1].r-p[i<<1].ren+1<=id) return p[i<<1].ren+p[i<<1|1].len; else search1(id,i<<1); } else { if(p[i<<1|1].len+p[i<<1|1].l-1>=id) return p[i<<1].ren+p[i<<1|1].len; else search1(id,i<<1|1); } } int main() { int n,q,a; while(scanf("%d%d",&n,&q)!=EOF) { build_tree(1,1,n); top=1; getchar(); while(q--) { char ch; scanf("%c",&ch); if(ch=='D') { scanf("%d",&a); update(a,1,0); stack1[top++]=a; } else if(ch=='Q') { scanf("%d",&a); printf("%d\n",search1(a,1)); } else if(ch=='R') { if(top>1) { update(stack1[--top],1,1); } } getchar(); } } return 0; }
View Code
相关文章推荐
- hdu 1540 & poj 2892 Tunnel Warfare 线段树区间合并
- hdu1540 && POJ2892 Tunnel Warfare
- HDU 1540 && POJ 2892 Tunnel Warfare (线段树,区间合并).
- Hdu 1540 && Poj 2892 Tunnel Warfare
- hdu 1540 & poj 2892Tunnel Warfare(线段树区间合并)
- HDU 1540 && POJ 2892 线段树 单点染色 区间查询
- poj 2892 || hdu 1540 Tunnel Warfare
- HDU 1540 POJ 2892 Tunnel Warfare
- POJ 2892 Tunnel Warfare || HDU 1540(树状数组+二分 || 线段树的单点更新+区间查询)
- HDU 1540 POJ 2892 Tunnel Warfare
- hdu 1540 && poj 2892
- poj 2892 hdu 1540Tunnel Warfare(poj 线段树 区间合并)
- HDU 1540 POJ 2892 线段树区间合并
- POJ 2892 Tunnel Warfare && HDOJ 1540 (线段树)
- HDOJ 1540 && POJ 2892 —— 线段树
- 【维护区间最长连续子序列 && 线段树 && 区间归并】HDU - 1540 Tunnel Warfare
- 【POJ 3691】【hdu 2457】DNA repair 中文题意&题解&代码(C++)
- 【扫描线法】&& poj 1177 && hdu 1828
- POJ 1201 && HDU 1384 Intervals(差分约束系统)
- POJ&&HDU 1579 ZOJ 1168 Function Run Fun