1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 5 using namespace std; 6 const int N=1000; 7 8 int a[N]; 9 int sum[N]; 10 int belong[N]; 11 int size[N] 12 int add[N]; 13 14 15 int K_ask(int l,int r) 16 { 17 int ans=0; 18 if(belong[l]==belong[r])ans-=sum[belong[l]]; 19 while(belong[l]==belong[l-1]) 20 { 21 ans+=a[l]+add[belong[l]]; 22 l++; 23 } 24 while(belong[r]==belong[r+1]) 25 { 26 ans+=a[r]+add[belong[r]]; 27 r--; 28 } 29 for(int i=belong[l]+1;i<belong[r];i++) 30 { 31 ans+=sum[i]; 32 } 33 return sum[i]; 34 } 35 36 void K_mo(int l,int r,int v) 37 { 38 if(belong[l]==belong[r]) 39 { 40 for(int i=l;i<=r;i++) 41 { 42 a[i]+=v; 43 } 44 return ; 45 } 46 while(belong[l]==belong[l-1]) 47 { 48 a[l]+=v; 49 l++; 50 } 51 while(belong[r]==belong[r+1]) 52 { 53 a[r]+=v; 54 r--; 55 } 56 for(int i=belong[l]+1;i<belong[r];i++) 57 { 58 add[i]+=v; 59 sum[i]+=size[i]*v; 60 } 61 } 62 63 int main() 64 { 65 int n; 66 cin>>n; 67 int s=sqrt(n); 68 for(int i=1;i<=n;i++) 69 { 70 cin>>a[i]; 71 } 72 for(int i=1;i<=n;i++) 73 { 74 belong[i]=(i-1)/s+1; 75 } 76 int cnt=belong[n]; 77 for(int i=1;i<s;i++) 78 { 79 sum[i]=0;add[i]=0; 80 size[i]=s; 81 } 82 if(!n%s)size[cnt]=s; 83 else size[cnt]=n%s; 84 85 for(int i=1;i<=n;i++) 86 { 87 sum[belong[i]]+=a[i]; 88 } 89 90 //... 91 K_ask(l,r); 92 K_mo(l,r,v); 93 }