fork download
  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<iostream>
  4. #include<vector>
  5. #include<cstring>
  6. using namespace std;
  7. #define getcx getchar_unlocked
  8. inline void rl( int &n )
  9. {
  10. n=0;
  11. int ch=getcx();int sign=1;
  12. while( ch < '0' || ch > '9' )
  13. {if(ch=='-')sign=-1; ch=getcx();}
  14. while( ch >= '0' && ch <= '9' )
  15. n = (n<<3)+(n<<1) + ch-'0', ch=getcx();
  16. n=n*sign;
  17. }
  18. void update(long long BIT[],int n,int x,int val)
  19. {
  20. while(x<=n)
  21. {
  22. BIT[x]=BIT[x]+val;
  23. //cout<<"BIT["<<x<<"] "<<BIT[x]<<endl;
  24. x+=(x&-x);
  25. }
  26. }
  27. long long query(long long BIT[],int a)
  28. {
  29. long long sum=0;
  30. while(a>0)
  31. {
  32. sum+=(BIT[a]);
  33. //cout<<"BIT["<<a<<"] "<<BIT[a]<<endl;
  34. a-=(a&-a);
  35. }
  36. return sum;
  37. }
  38. int main()
  39. {
  40. long long n,m,x;
  41. cin>>n;
  42. long long BIT[n+10];
  43. memset(BIT,0,sizeof BIT);
  44. for(int i=1;i<=n;i++)
  45. {
  46. cin>>x;
  47. update(BIT,n,i,x);
  48. }
  49. for(int i=1;i<=n;i++)
  50. {
  51. cout<<BIT[i]<<" ";
  52. }
  53. cout<<endl;
  54. int q;
  55. cin>>q;
  56. while(q--)
  57. {
  58. int f,p,q,v;
  59. cin>>f;
  60. if(!f)
  61. {
  62. cin>>p>>q>>v;
  63. update(BIT,n,p,v);
  64. update(BIT,n,q+1,-v);
  65. for(int i=1;i<=n;i++)
  66. {
  67. cout<<BIT[i]<<" ";
  68. }
  69. cout<<endl;
  70. }
  71. else
  72. {
  73. cin>>v;
  74. cout<<query(BIT,v)<<endl;
  75. }
  76. }
  77. }
Success #stdin #stdout 0s 3148KB
stdin
5
4 6 7 3 2
5
0 2 3 5
0 3 5 2
1 5
stdout
4 10 7 20 2 
4 15 7 20 2 
4 15 9 22 2 
24
24
24