fork(1) download
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4. vector <long long> tree;
  5. long long merge (long long a , long long b){
  6. return a+b;
  7. }
  8. void build (int a[], int v, int l, int r){
  9. if(r-l==1){
  10. tree[v]=a[l];
  11. return;
  12. }
  13. int m=(l+r)/2;
  14. build (a,2*v+1, l , m);
  15. build (a,2*v+2, m , r);
  16. tree[v]=merge (tree[2*v+1],tree[2*v+2]);
  17. }
  18. long long get(int v, int l, int r, int ql,int qr){
  19. int E=0;
  20. if(ql<=l and qr>=r){
  21. return tree[v];
  22. }
  23. if (r<=ql or qr<=l){
  24. return E;
  25. }
  26. int m=(l+r)/2;
  27. return merge ( get(2*v+1, l , m , ql, qr),
  28. get(2*v+2, m , r, ql, qr));
  29. }
  30. void update (int v, int l, int r , int pos, long long val){
  31. if (r-l==1){
  32. tree[v]=val;
  33. return;
  34. }
  35. int m=(l+r)/2;
  36. if(pos<m){
  37. update (2*v+1, l,m , pos, val);
  38. }else {
  39. update (2*v+2, m , r, pos, val);
  40. }
  41. tree[v]=merge (tree[2*v+1],tree[2*v+2]);
  42. }
  43. int main() {
  44. int n;
  45. cin>>n;
  46. int a[n];
  47. for(int i=0; i<n; i++){
  48. cin>>a[i];
  49. }
  50. tree.resize(4*n);
  51. build(a,0,0,n);
  52. int k;
  53. cin>>k;
  54. while(k--){
  55. string q;
  56. cin>>q;
  57. if(q=="s"){
  58. int l,r;
  59. cin>>l>>r;
  60. cout<<get(0,0,n,l-1,r)<<'\n';
  61. } else {
  62. int i,x;
  63. cin>>i>>x;
  64. update (0,0,n,i-1,x);
  65. }
  66. }
  67. return 0;
  68. }
Success #stdin #stdout 0.01s 5288KB
stdin
5
2 2 2 1 5
2
2 3
2 5
stdout
Standard output is empty