zoj 3573 Under Attack
2012-08-31 00:57
309 查看
更新的时候一定要确保更新到最后一排子节点,一开始忽略这个了,交了很多遍都是WA,所有的更新后在加一次更新,确保所有节点的add值为0.就可以了。 #include <stdio.h> #include <iostream> #include <string.h> using namespace std; int n,q1,q2; int ma; struct node{ int l; int r; int add; int sum; }tree[150000]; void build_tree(int i,int l,int r) { int mid=(l+r)/2; tree[i].l=l; tree[i].r=r; tree[i].add=0; tree[i].sum=0; if(tree[i].l==tree[i].r) { return; } build_tree(2*i,l,mid); build_tree(2*i+1,mid+1,r); tree[i].sum=tree[2*i].sum+tree[2*i+1].sum; } int updata(int i,int a,int b,int c) { if(tree[i].l==a&&tree[i].r==b) { tree[i].add+=c; tree[i].sum+=(tree[i].r-tree[i].l+1)*c; return tree[i].sum; } if(tree[i].add) { tree[2*i].add+=tree[i].add; tree[2*i].sum+=(tree[2*i].r-tree[2*i].l+1)*tree[i].add; tree[2*i+1].add+=tree[i].add; tree[2*i+1].sum+=(tree[2*i+1].r-tree[2*i+1].l+1)*tree[i].add; tree[i].add=0; } if(a>=tree[2*i+1].l) return updata(2*i+1,a,b,c); else if(b<=tree[2*i].r) return updata(2*i,a,b,c); else { return updata(2*i,a,tree[2*i].r,c)+updata(2*i+1,tree[2*i+1].l,b,c); } tree[i].sum=tree[2*i].sum+tree[2*i+1].sum; } void updata1(int i) { if(tree[i].l==tree[i].r) return; if(tree[i].add) { tree[2*i].add+=tree[i].add; tree[2*i].sum+=(tree[2*i].r-tree[2*i].l+1)*tree[i].add; tree[2*i+1].add+=tree[i].add; tree[2*i+1].sum+=(tree[2*i+1].r-tree[2*i+1].l+1)*tree[i].add; tree[i].add=0; } updata1(2*i); updata1(2*i+1); } void qurry1(int i) { //cout<<tree[i].sum<<endl; if(tree[i].r==tree[i].l) { if(tree[i].sum>ma) { ma=tree[i].sum; q1=tree[i].l; } // cout<<tree[i].sum<<endl;; return; } qurry1(2*i); qurry1(2*i+1); } void qurry2(int i) { if(tree[i].r==tree[i].l) { if(tree[i].sum>ma) { ma=tree[i].sum; q2=tree[i].l; } return; } qurry2(2*i+1); qurry2(2*i); } int main() { while(scanf("%d",&n)!=EOF) { build_tree(1,0,n); int a,b,c; while(scanf("%d%d%d",&a,&b,&c)) { if(a==-1) break; updata(1,a,b,c); } updata1(1); ma=-1; qurry1(1); ma=-1; qurry2(1); cout<<q1<<" "<<q2<<endl; } return 0; }
相关文章推荐
- zoj 3573 Under Attack
- zoj 3573 Under Attack
- zoj 3573 Under Attack(线段树 标记法 最大覆盖数)
- ZOJ 3573 Under Attack (线段树两边维护最大值)
- ZOJ 3573 Under Attack (线段树版)
- Under Attack(zoj)
- ZOJ 3573 Under Attack
- zoj 3573 Under Attack
- [zoj]3573 Under Attack I
- zoj 1456
- ZOJ-1405
- zoj_1241 Geometry Made Simple
- ZOJ 3705 Applications(模拟题)
- zoj 3557 How Many Sets II 求Comb(n,m)%p p很大素数 m<=1e4
- ZOJ-1715
- zoj 1239 Hanoi Tower Troubles Again!
- ZOJ 3777-Problem Arrangement(状压DP)
- zoj 3211 Dream City 动态规划
- ZOJ 2405 Specialized Four-Digit Numbers
- ZOJ 3768 Continuous Login