hdu 1166線段樹

來源:互聯網
上載者:User

標籤:線段樹   遞迴   

線段樹的一般模板,1.結構體數組tree來儲存  2.線段樹的構建函數buildTree  3.改變元素值函數update   4.查詢區間內總和的函數query
全部使用遞迴來實現

#####################################################################
#include<iostream>#include<stdio.h>#include<string>#include<string.h>using namespace std;const int maxn = 50050;int ans;struct node{int left, right, sum;int mid(){return (left+right)/2;}}tree[maxn*4];void buildTree(int left, int right, int rt){tree[rt].left = left;tree[rt].right = right;if(left == right){cin >> tree[rt].sum;return ;}int mid = tree[rt].mid();buildTree(left, mid, rt*2);buildTree(mid+1, right, rt*2+1);tree[rt].sum = tree[rt*2].sum + tree[rt*2+1].sum;}void query(int left, int right, int rt, int L, int R){if(L <= left && R >= right){ans += tree[rt].sum;return ;}int mid = tree[rt].mid();if(R <= mid)query(left, mid, rt*2, L, R);else if(L > mid)query(mid+1, right, rt*2+1, L, R);else{query(left, mid, rt*2, L, R);query(mid+1, right, rt*2+1, L, R);}}void update(int left, int right, int rt, int pos, int add){if(left == right){tree[rt].sum += add;return ;}int mid = tree[rt].mid();if(pos <= mid)update(left, mid, rt*2, pos, add);else update(mid+1, right, rt*2+1, pos, add);tree[rt].sum = tree[rt*2].sum + tree[rt*2+1].sum;}int main(){int T, N, temp;int a, b, Case = 0;string str;scanf("%d",&T);while(T --){cin >> N;buildTree(1, N, 1);Case ++;printf("Case %d:\n",Case);while( cin >> str ){if(str == "End") break;scanf("%d%d", &a, &b);if(str == "Add"){update(1, N, 1, a, b);}else if(str == "Sub"){update(1, N, 1, a, -b);}else {ans = 0;query(1, N, 1, a, b);printf("%d\n",ans); }}}return 0;}

hdu 1166線段樹

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.