fork(2) download
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cmath>
  4. using namespace std;
  5.  
  6. long long int num;
  7. long long int bit[1000001]={0};
  8.  
  9.  
  10. long long int sum(long long int b)
  11. {
  12. long long int sum = 0;
  13. for (; b; b -= b&(-b))
  14. sum += bit[b];
  15. return sum;
  16. }
  17.  
  18. long long int sum(long long int a, long long int b)
  19. {
  20. return sum(b) - (a == 1 ? 0 : sum(a - 1));
  21. }
  22.  
  23. void update( long long int idx, long long int val)
  24. {
  25. while(idx<=num){
  26. bit[idx]+=val;
  27.  
  28. idx+=(idx&(-idx));
  29. }
  30. }
  31.  
  32. void updatesub( long long int idx, long long int val)
  33. {
  34. while(idx<=num){
  35. bit[idx]-=val;
  36.  
  37. idx+=(idx&(-idx));
  38. }
  39. }
  40.  
  41.  
  42. int main()
  43. {
  44. int ele,i;
  45. long long int s=0,m,c;
  46. cin>>num>>m;
  47.  
  48. for(i=1;i<=num;i++)
  49. {
  50. cin>>ele;
  51. s+=ele;
  52. if(i&1==1)
  53. { bit[i]=ele;
  54. }
  55. else
  56. { c=i; bit[c]=s;
  57. while(c>0)
  58. { bit[c] -= bit[c - ( c& (-c))];
  59. c= c - ( c& (-c));
  60. }
  61. }
  62. }
  63. while(m--)
  64. {
  65. long long int low,up;
  66. char k;
  67. cin>>k>>low>>up;
  68. if(k=='S')
  69. {
  70. low=low+1; up=up+1;
  71. cout<<sum(low,up)<<endl;
  72. }
  73. else if(k=='G')
  74. { low=low+1;
  75. update(low,up);
  76. }
  77. else if(k=='T')
  78. { low=low+1;
  79. updatesub(low, (up));
  80. }
  81. }
  82. return 0;
  83. }
Success #stdin #stdout 0s 10552KB
stdin
5 3
1000 1002 1003 1004 1005
S 0 2
G 0 3
S 0 2
stdout
3005
3008