Number of columns of block entry hzw

T1

Interval modify the number of columns, single point of inquiry. Segment tree, the tree can be an array. (Code copied)

 1 #include <bits/stdc++.h>
 2 
 3 using namespace std;
 4 
 5 typedef long long ll;
 6 const int maxn=5e4+5;
 7 
 8 int n,blo;
 9 int v[maxn],bl[maxn],atag[maxn];
10 
11 void add(int a,int b,int c){
12     for(int i=a;i<=min(bl[a]*blo,b);i++)
13         v[i]+=c;
14     if(bl[a]!=bl[b])
15         for(int i=(bl[b]-1)*blo+1;i<=b;i++)
16             v[i]+=c;
17     for(int i=bl[a]+1;i<=bl[b]-1;i++)
18         atag[i]+=c;
19 }
20 
21 int main()
22 {
23     scanf("%d",&n);blo=sqrt(n);
24     for(int i=1;i<=n;i++) scanf("%d",&v[i]);
25     for(int i=1;i<=n;i++) bl[i]=(i-1)/blo+1;
26     for(int i=1;i<=n;i++) 
27     {
28         int op,a,b,c;
29         scanf("%d%d%d%d",&op,&a,&b,&c);
30         if(op==0) add(a,b,c);
31         if(op==1) printf("%d\n",v[b]+atag[bl[b]]);
32     }
33     return 0;
34 }

 

Guess you like

Origin www.cnblogs.com/Msmw/p/11344385.html