线段树1.0 求区间sum

来源:互联网 发布:单片机课后题答案 编辑:程序博客网 时间:2024/05/29 16:55

哇第一次手写线段树好激动好激动好激动!



#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>#include<string>using namespace std;int a[20000+5];struct node{int l, r, sum;}tree[20000*4];int ans;int  built(int root, int l, int r){tree[root].l=l;tree[root].r=r;int mid=l+r>>1;if(l == r)  tree[root].sum=a[l];else {built(root<<1, l, mid);built(root<<1|1, mid+1, r);tree[root].sum=tree[root*2].sum+tree[root*2+1].sum;}}int search(int root, int ll, int rr){int mid = (tree[root].l+tree[root].r)/2;if(tree[root].l>=ll&&tree[root].r<=rr) return tree[root].sum;if(mid>=rr)  return search(root<<1, ll, rr);else if(mid<ll) return search (root<<1|1, ll, rr);else{ return search(root<<1, ll, mid) + search(root<<1|1, mid+1, rr) ;}}int main(){int n;scanf("%d", &n);int i, j;for(i = 1; i <= n; i++)  scanf("%d", &a[i]);built(1, 1, n);int ll, rr;while(~scanf("%d%d", &ll, &rr)){ans=0;printf("***\n");printf("%d\n", search(1, ll, rr));}return 0;}/*51 2 3 4 52 4*/


原创粉丝点击