fork(1) download
  1. //follows o base indexing for array and 1 base for segtree
  2. #include<bits/stdc++.h>
  3. #include<algorithm>
  4. #define mod 1000000007
  5. #define lp(i,n) for(int i=0;i<n;i++)
  6. using namespace std;
  7. typedef long long ll;
  8. typedef long int li;
  9. const int MAX=200000+1;
  10. ll Ltree[4*MAX];//for (-1)^(i)*A[i]*(i+1)
  11. ll Stree[4*MAX];// for (-1)^(i)*A[i]
  12.  
  13. void build(int node,int l,int r,int tree[],int arr[]){
  14. if(l==r)
  15. tree[node]=arr[l];
  16. else{
  17. int mid=(l+r)>>1;
  18. build(2*node,l,mid,tree,arr);
  19. build(2*node+1,mid+1,r,tree,arr);
  20. tree[node]=tree[2*node]+tree[2*node+1];
  21. }
  22. }
  23. void update(int node,int l,int r,int tree[],int arr[],int idx,int val){
  24. if(l==r){
  25. tree[node]=val;
  26. arr[idx]=val;
  27. }
  28. else{
  29. int mid=(l+r)>>1;
  30. if(idx>=l&&idx<=mid){update(2*node,l,mid,tree,arr,idx,val);}
  31. else update(2*node+1,mid+1,r,tree,arr,idx,val);
  32.  
  33. tree[node]=tree[2*node]+tree[2*node+1];
  34. }
  35. }
  36. ll querry(int node,int l,int r,int ql,int qr,int tree[],int arr[] ){
  37. if(qr<l || ql>r)return 0;
  38. if(ql<=l&& r<=qr)return tree[node];
  39. int mid=(l+r)/2;
  40. ll left=querry(2*node,l,mid,ql,qr,tree,arr);
  41. ll right=querry(2*node+1,mid+1,r,ql,qr,tree,arr);
  42. return (left+right);
  43. }
  44.  
  45.  
  46. int main()
  47. { ios_base::sync_with_stdio(false);
  48. cin.tie(NULL);
  49. int t,k=1;
  50. cin>>t;
  51. while(t--){
  52. int n,q,i;
  53. cin>>n>>q;
  54. int larr[n];
  55. int arr[n];
  56. lp(i,n){
  57. cin>>arr[i];
  58. arr[i]=pow(-1,i%2)*arr[i];
  59. larr[i]=arr[i]*(i+1);
  60. }
  61. build(1,0,n-1,Ltree,larr);
  62. build(1,0,n-1,Stree,arr);
  63. ll finalans=0;
  64. while(q--){
  65. char type;
  66. cin>>type;
  67. if(type=='Q'){
  68. ll ans=0;
  69. int l,r;
  70. cin>>l>>r;
  71. --l;--r;
  72. ans=pow(-1,l%2)*(querry(1,0,n-1,l,r,Ltree,larr) -l*querry(1,0,n-1,l,r,Stree,arr));
  73. finalans+=ans;
  74. }
  75. else
  76. {
  77. int idx,val;
  78. cin>>idx>>val;
  79. --idx;
  80. val=pow(-1,idx%2)*val;
  81. update(1,0,n-1,Ltree,larr,idx,val*(idx+1));
  82. update(1,0,n-1,Stree,arr,idx,val);
  83. }
  84. }
  85. cout <<"Case #"<<k<<": "<<finalans<<endl;
  86. k++;
  87. memset(Ltree,0,sizeof(Ltree));
  88. memset(Stree,0,sizeof(Stree));
  89.  
  90. }
  91. return 0;
  92. }
  93.  
  94.  
Compilation error #stdin compilation error #stdout 0s 9788KB
stdin
2
5 4
1 3 9 8 2
Q 2 4
Q 5 5
U 2 10
Q 1 2
3 3
4 5 5
U 1 2
U 1 7
Q 1 2
compilation info
prog.cpp: In function ‘int main()’:
prog.cpp:61:25: error: cannot convert ‘ll*’ {aka ‘long long int*’} to ‘int*’
           build(1,0,n-1,Ltree,larr);
                         ^~~~~
prog.cpp:13:41: note:   initializing argument 4 of ‘void build(int, int, int, int*, int*)’
     void build(int node,int l,int r,int tree[],int arr[]){
                                     ~~~~^~~~~~
prog.cpp:62:25: error: cannot convert ‘ll*’ {aka ‘long long int*’} to ‘int*’
           build(1,0,n-1,Stree,arr);
                         ^~~~~
prog.cpp:13:41: note:   initializing argument 4 of ‘void build(int, int, int, int*, int*)’
     void build(int node,int l,int r,int tree[],int arr[]){
                                     ~~~~^~~~~~
prog.cpp:72:51: error: cannot convert ‘ll*’ {aka ‘long long int*’} to ‘int*’
               ans=pow(-1,l%2)*(querry(1,0,n-1,l,r,Ltree,larr) -l*querry(1,0,n-1,l,r,Stree,arr));
                                                   ^~~~~
prog.cpp:36:53: note:   initializing argument 6 of ‘ll querry(int, int, int, int, int, int*, int*)’
    ll querry(int node,int l,int r,int ql,int qr,int tree[],int arr[] ){
                                                 ~~~~^~~~~~
prog.cpp:72:85: error: cannot convert ‘ll*’ {aka ‘long long int*’} to ‘int*’
               ans=pow(-1,l%2)*(querry(1,0,n-1,l,r,Ltree,larr) -l*querry(1,0,n-1,l,r,Stree,arr));
                                                                                     ^~~~~
prog.cpp:36:53: note:   initializing argument 6 of ‘ll querry(int, int, int, int, int, int*, int*)’
    ll querry(int node,int l,int r,int ql,int qr,int tree[],int arr[] ){
                                                 ~~~~^~~~~~
prog.cpp:81:30: error: cannot convert ‘ll*’ {aka ‘long long int*’} to ‘int*’
               update(1,0,n-1,Ltree,larr,idx,val*(idx+1));
                              ^~~~~
prog.cpp:23:41: note:   initializing argument 4 of ‘void update(int, int, int, int*, int*, int, int)’
    void update(int node,int l,int r,int tree[],int arr[],int idx,int val){
                                     ~~~~^~~~~~
prog.cpp:82:30: error: cannot convert ‘ll*’ {aka ‘long long int*’} to ‘int*’
               update(1,0,n-1,Stree,arr,idx,val);
                              ^~~~~
prog.cpp:23:41: note:   initializing argument 4 of ‘void update(int, int, int, int*, int*, int, int)’
    void update(int node,int l,int r,int tree[],int arr[],int idx,int val){
                                     ~~~~^~~~~~
stdout
Standard output is empty