CODE[VS] 1080: Click to enter the first floor of the magic tower
CODE[VS] 1081: Click to enter the second floor of the magic tower
The tree array is a good thing. The constant is smaller than the line segment tree, and the code is simpler than the line segment tree.
Based on interval addition, magnetic field summation, interval modification, single-point query, single-point modification, interval Query…
About the lowbit array, this is a very magical thing. It is hard to imagine how the first person who thought of dividing the array into this way would think of it.
lowbit[i] is stored It is a certain number, which is the number at the position of the last 1 in its binary system. Obviously, the odd number lowbit == 1
Every time the interval is modified, it is in the lowbit direction, and each query is in the reverse lowbit direction.
For more detailed instructions, please refer to Liu Rujia’s “Introduction to Algorithmic Competition Classics” or other Shenben Blogs
Line segment tree exercises (interval summation, single-point modification)
< pre class="prettyprint">#include
“,sum(y)-sum(x-1 span>));} return 0; }
Line segment tree Exercise 2 (Interval modification, single-point query)
#include #include #include #include #include const int maxn = 100005;using namespace std;int n,q;int c[maxn];int b[maxn];int lowbit(int x){ return x&(-x);} inline void span> add(int i,int num){ while (i <= n) {c[i] += num; i += lowbit(i); }}inline int sum(int x){ int tot = 0; while(x> 0) { tot += c[x]; x -= lowbit(x);} return tot;}int main(){ scanf("%d",&n); for(int i =1;i <=n;i++) {< span class="hljs-keyword">int x; scanf("%d" ,&x); add(i,x);} scanf("%d",&q); for(int i = 1;i <= q;i++) {int cz; int aa,bb,xx,ii; scanf("%d",&cz); if(cz == 1) {scanf("%d%d%d ",&aa,&bb,&xx); for(int j = aa;j < = bb;j++) {add(j,xx);}} if(cz == 2) {scanf("%d",&ii); printf ("%d
",sum(ii)-sum(ii-1 ));} }return 0;}
JOJO: DIO What are you doing?!
DIO: I won’t play the line segment tree anymore JOJO!
THE END
http://blog.csdn.net/loi_peacefuldog
CODE[VS] 1080: Click to enter the first layer of the magic tower
CODE[VS] 1081: Click to enter the second layer of the magic tower
The tree array is a good thing, the constant is more than the line segment The tree is smaller and the code is simpler than the line segment tree.
Based on interval addition, magnetic field summation, interval modification, single-point query, single-point modification, interval query…
About lowbit Array, this is a very magical thing, it is hard to imagine how the first person who thought of dividing the array in this way would think of it. Obviously, the odd number lowbit == 1
Each time you modify the interval along the lowbit direction, and each query reverses the lowbit direction
For more detailed instructions, please refer to Liu Rujia’s “Introduction to Algorithm Competition” “Classic” book or other Shenben Blog
Line segment tree exercise (interval summation, single-point modification)
#include #include using namespace std;int n, m; int a[100001]; int lowbit(int x) {return x&(-x); } void update(int x, int num) {while(x<=n) {a[x]+=num; x+=lowbit(x);}} int sum(int x) {int sum=0; while(x>0) {sum+=a[x ]; x-=lowbit(x);} return sum;} int main() {int i,j,temp; int a,x,y; scanf("%d",&n); for(i=1;i<=n;i++) {scanf("%d",&temp); update(i,temp);} scanf("%d",&m); for(i=1 ;i<=m;i++) {scanf("%d%d%d",&a, &x,&y); if(a==1) update(x, y); else printf("%d
",sum (y)-sum(x-1));} return 0; }
Line segment tree exercise 2 (interval modification, single-point query)
#include #include #include # include #include const int maxn = 100005;using namespace std;int n,q; int c[maxn];int b[maxn];int lowbit(int x){ return x&(-x);} inline span> void add(int i,int num){ while(i <= n) {c[i] += num; i += lowbit(i); }}inline int sum(int x) {int tot = 0; while( x> 0) {tot += c[x]; x -= lowbit(x);} return tot;}int main(){ scanf(" %d",&n); for(int i =1;i <=n;i++) {int x; scanf ("%d",&x); add(i,x);} scanf("%d",&q); for(int i = 1;i <= q;i++) {int cz; int aa,bb,xx,ii; scanf("%d" ,&cz); if(cz == 1) { scanf("%d%d%d",&aa,&bb,&xx); for(int j = aa;j <= bb;j++) {add(j,xx);}} if< /span>(cz == 2) {scanf( "%d",&ii); printf("%d
",sum (ii)-sum(ii-1));} }return 0;}
JOJO: DIO what are you going to do?!
DIO: I won’t play the segment tree anymore JOJO!
THE END
By Peacefuldoge
http://blog .csdn.net/loi_peacefuldog