Segment tree algorithm (unfinished)

. 1  struct Node
 2  {
 . 3      int L, R & lt, SUM;
 . 4  };
 . 5 Node NO [ 500000 ];
 . 6  // store value of each point 
. 7  int Number [ 50000 ];
 . 8  // store each point corresponding to a node 
9  int PA [ 500000 ];
 10  void Build ( int K, int L, int R & lt)
 . 11  {
 12 is      NO [K] .L = L;
 13 is      NO [K] .r = R & lt;
 14      IF (L ==r)
15     {
16         no[k].sum=number[l];
17         pa[l]=k;
18         return ;
19     }
20     int mid=(l+r)/2;
21     build(k*2,l,mid);
22     build(k*2+1,mid+1,r);
23     no[k].sum=no[k*2].sum+no[k*2+1].sum;
24 }
25 void change(int k,int x)
26 {
27     no[k].sum +=x;
28     if(k!=1)
29     {
30         change(k/2,x);
31     }
32 }
33 int query(int k,int l,int r)
34 {
35     if(no[k].l==l&&no[k].r==r)
36     {
37         return no[k].sum;
38     }
39     int mid = (no[k].l+no[k].r)/2;
40     if(r<=mid)
41     {
42         return query(k*2,l,r);
43     }
44     else if(l>mid)
45     {
46         return query(k*2+1,l,r);
47     }
48     else
49     {
50         return query(k*2,l,mid)+query(k*2+1,mid+1,r);
51     }
52 }

 

Guess you like

Origin www.cnblogs.com/mzchuan/p/11748480.html