HDOJ 1166 敵兵布陣

來源:互聯網
上載者:User

全裸的單點更新....

代碼:

#include<cstdio>#include<cstring>#include<iostream>using namespace std;#define MAXN 50002struct node{int mid, l, r;int v;}a[MAXN*4];// 4倍?int n;void pushUp(int e) { a[e].v = a[e<<1].v+a[e<<1|1].v; }void build(int l, int r, int e)//CALL:build(1, n, 1){a[e].l=l, a[e].r=r;if(l==r){scanf("%d", &a[e].v);}else{a[e].mid = (l+r)>>1;build(l, a[e].mid, e<<1);build(a[e].mid+1, r, e<<1|1);pushUp(e);//以前的做法是先init空的樹,再insert資料。現在沒有insert了。所以要pushUp}}void update(int p, int add, int l, int r, int e)//單點更新,CALL:update(p, add, 1, n, 1);{if(l==r){a[e].v+=add;}else{if(p<=a[e].mid) update(p, add, l, a[e].mid, e<<1);else update(p, add, a[e].mid+1, r, e<<1|1);pushUp(e);//以前的做法是,隨著update,每個經過的區間都先add}}int query(int L, int R, int l, int r, int e)//查詢[L, R],CALL:query(L, R, 1, n, 1);{int ret=0;if(L<=l && r<=R)//當前區間完全包含所查區間{ret+=a[e].v;}else//l L R r{if(L<=a[e].mid)ret+=query(L, R, l, a[e].mid, e<<1);//L<= midif(a[e].mid<R) ret+=query(L, R, a[e].mid+1, r, e<<1|1);//mid<R, 沒有=號}return ret;}int main(){int t;scanf("%d", &t);for(int i=0; i<t; i++){printf("Case %d:\n", i+1);scanf("%d", &n);build(1, n, 1);for(char buf[10]; scanf("%s", &buf) && buf[0]!='E'; ){int a, b;scanf("%d%d", &a, &b);if(buf[0]=='Q') {printf("%d\n", query(a, b, 1, n, 1));}elseif(buf[0]=='A'){update(a, b, 1, n, 1);}else if(buf[0]=='S'){update(a, -b, 1, n, 1);}}}}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.