HDU.1540 Tunnel Warfare
来源:互联网 发布:6合统计软件 编辑:程序博客网 时间:2024/06/05 04:02
【题意】D代表破坏村庄,R代表修复最后被破坏的那个村庄,Q代表询问包括x在内的最大连续区间是多少?
【解题方法】很基础的线段树区间维护了,lsum代表区间左端点开始的最大连续值,rsum代表区间右端点开始的最大连续值,msum代表整个区间的最大连续值!
【AC 代码】
//HDU 1540//Tunnel Warfare.#include <bits/stdc++.h>using namespace std;const int maxn=50010;int s[maxn],top;struct node{ int l,r; int lsum,rsum,msum;}Tree[maxn<<2];void PushUp(int rt){ Tree[rt].lsum=Tree[rt*2].lsum; Tree[rt].rsum=Tree[rt*2+1].rsum; Tree[rt].msum=max(max(Tree[rt*2].msum,Tree[rt*2+1].msum),Tree[rt*2].rsum+Tree[rt*2+1].lsum); if(Tree[rt*2].lsum==Tree[rt*2].r-Tree[rt*2].l+1) Tree[rt].lsum+=Tree[rt*2+1].lsum; if(Tree[rt*2+1].rsum==Tree[rt*2+1].r-Tree[rt*2+1].l+1) Tree[rt].rsum+=Tree[rt*2].rsum;}void Build(int l,int r,int rt){ Tree[rt].l=l,Tree[rt].r=r; Tree[rt].lsum=Tree[rt].rsum=Tree[rt].msum=r-l+1; if(l==r) return ; int m=(l+r)/2; Build(l,m,rt*2); Build(m+1,r,rt*2+1);}void update(int pos,int val,int rt){ if(Tree[rt].l==Tree[rt].r) { if(val==1) Tree[rt].lsum=Tree[rt].rsum=Tree[rt].msum=1; else Tree[rt].lsum=Tree[rt].rsum=Tree[rt].msum=0; return ; } int mid=(Tree[rt].l+Tree[rt].r)/2; if(pos<=mid) update(pos,val,rt*2); else update(pos,val,rt*2+1); PushUp(rt);}int query(int rt,int pos){ if(Tree[rt].l==Tree[rt].r||Tree[rt].msum==0||Tree[rt].msum==Tree[rt].r-Tree[rt].l+1) return Tree[rt].msum; int mid=(Tree[rt].l+Tree[rt].r)/2; if(pos<=mid) { if(pos>=Tree[rt*2].r-Tree[rt*2].rsum+1) return query(rt*2,pos)+query(rt*2+1,mid+1); else return query(rt*2,pos); } else { if(pos<=Tree[rt*2+1].l+Tree[rt*2+1].lsum-1) return query(rt*2+1,pos)+query(rt*2,mid); else return query(rt*2+1,pos); }}int main(){ int n,q,x; char op[3]; while(~scanf("%d%d",&n,&q)) { top=0; Build(1,n,1); //puts("success"); for(int i=1; i<=q; i++) { scanf("%s",op); if(op[0]=='D') { scanf("%d",&x); s[top++]=x; update(x,0,1); } else if(op[0]=='Q') { scanf("%d",&x); printf("%d\n",query(1,x)); } else { if(x>0){ x=s[--top]; update(x,1,1); } } } }}
0 0
- hdu 1540 Tunnel Warfare
- hdu 1540 Tunnel Warfare
- hdu 1540 Tunnel Warfare
- hdu 1540 Tunnel Warfare
- HDU 1540 Tunnel Warfare
- hdu 1540 Tunnel Warfare
- HDU 1540 Tunnel Warfare
- HDU 1540 Tunnel Warfare
- hdu 1540 Tunnel Warfare
- HDU 1540 Tunnel Warfare
- HDU 1540 Tunnel Warfare
- hdu 1540 Tunnel Warfare
- HDU 1540 Tunnel Warfare
- HDU - 1540 Tunnel Warfare
- HDU 1540 Tunnel Warfare
- HDU.1540 Tunnel Warfare
- HDU.1540 Tunnel Warfare
- HDU 1540:Tunnel Warfare
- Thinkphp 连接数据库、查询、添加
- springmvc拦截器处理
- sqlserver 2008 r2 评估期已过解决办法
- Xcode 7.2 no matching provisioning profiles found
- SQL select的字段取别名
- HDU.1540 Tunnel Warfare
- Dubbo实例
- Codeforces 208 B Solitaire(记忆化搜索)
- Codeforces Round #361 (Div. 2) E. Mike and Geometry Problem (离散化)
- Ubuntu官网论坛再次被黑,又是SQL注入惹的祸
- 机器学习中的数学-线性回归,偏差、方差权衡《2》
- mysql的存储过程
- 关于DropDownList绑定SqlDataSource数据源
- android-createRfcommSocketToServiceRecord