Advertisement
Guest User

Untitled

a guest
Nov 18th, 2019
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.22 KB | None | 0 0
  1. #include<iostream>
  2.  
  3. using namespace std;
  4.  
  5. int arr[1000000], segm[4000000];
  6.  
  7. void build(int s, int e, int idx){
  8. if(s==e){
  9. segm[idx] = arr[s];
  10. return;
  11. }
  12. int mid = (s+e)/2;
  13. build(s, mid, idx*2);
  14. build(mid+1, e, idx*2+1);
  15. segm[idx] = segm[idx*2] + segm[idx*2+1];
  16. }
  17. int queries(int s, int e, int qs, int qe, int idx){
  18. if(qs>=s && qe<=e){
  19. return segm[idx];
  20. }
  21. else if(qs>e || qe < s){
  22. return 0;
  23. }
  24. int mid = (s+e)/2;
  25. int p1 = queries(s, mid, qs, qe, idx*2);
  26. int p2 = queries(mid+1, e, qs, qe, idx*2+1);
  27. return p1+p2;
  28. }
  29. void update(int s, int e, int us, int ue,int k,int idx){
  30. if(s==e && (us <= s && ue >= e)){
  31. segm[idx] += k;
  32. arr[s]+=k;
  33. return;
  34. }
  35. else if(ue < s || us > e){
  36. return;
  37. }
  38. int mid = (s+e)/2;
  39. update(s, mid, us, ue, k, idx*2);
  40. update(mid+1, e, us, ue, k, idx*2+1);
  41. segm[idx] = segm[idx*2]+segm[idx*2+1];
  42. }
  43.  
  44.  
  45.  
  46.  
  47. int main(){
  48.  
  49.  
  50. int N,Q,qS,qE,a,K, u;
  51.  
  52. cin >> N >> Q;
  53.  
  54. for(int i = 0; i<N; i++){
  55. cin >> arr[i];
  56. }
  57.  
  58. for(int i = 0; i<Q; i++){
  59. cin >> a;
  60. if(a == 2){
  61. cin >> qS >> qE;
  62. cout << queries(0, N-1, qS, qE, 1) << endl;
  63. }
  64. else{
  65. cin >> K >> u;
  66. cout << update(0, N-1, K, K, u, 1) << endl;
  67. }
  68. }
  69.  
  70.  
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement