Advertisement
Manioc

caralho segmentado

Jan 24th, 2018
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.60 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define N 100007
  3. #pragma GCC optimize ("O3")
  4.  
  5. #pragma GCC target ("sse4")
  6.  
  7. using namespace std;
  8.  
  9. int tree[2*N], A[N], viagens, casa;
  10.  
  11. void build(int node, int start, int end){
  12.     if(start == end) tree[node] = A[start];
  13.     else{
  14.         int mid = (start+end)/2;
  15.         build(2*node, start, mid);
  16.         build(2*node+1, mid+1, end);
  17.         tree[node] = max(tree[2*node], tree[2*node+1]);
  18.     }
  19. }
  20.  
  21. void update(int node, int start, int end, int idx, int val){
  22.     if(start==end){
  23.         A[idx] = val;
  24.         tree[node] = val;
  25.     }else{
  26.         int mid = (start+end)/2;
  27.         if(start <= idx && idx <= mid) update(2*node, start, mid, idx, val);
  28.         else update(2*node+1, mid+1, end, idx, val);
  29.         tree[node] = max(tree[2*node], tree[2*node+1]);
  30.     }
  31. }
  32.  
  33. int query(int node, int start, int end, int l, int r){
  34.     if(end < l || r < start) return 0;
  35.    
  36.     if(l <= start && end <= r) return tree[node];
  37.     int mid = (start+end)/2;
  38.     return max(query(2*node, start, mid, l, r), query(2*node+1, mid+1, end, l, r));
  39. }
  40.  
  41. int main(){
  42.     ios_base::sync_with_stdio(false);
  43.     int cases;
  44.     cin >> cases;
  45.     for(int x = 0; x < cases; x++){
  46.        
  47.         cin >> viagens >> casa;
  48.         for(int i = 1; i <= viagens; i++) cin >> A[i];
  49.         build(1,1, viagens);
  50.         int c;
  51.         cout << "Testcase " << x << ":\n";
  52.         cin >> c;
  53.         while(c--){
  54.             char p;
  55.             cin >> p;
  56.             if(p == 'A') {
  57.                 int red; cin >> red;
  58.                 casa += red;
  59.             }else if(p == 'B'){
  60.                 int idx, val; cin >> idx >> val;
  61.                 update(1,1,viagens, idx+1, val);
  62.             }else{
  63.                 int l, r; cin >> l >> r;
  64.                 cout << abs(casa-query(1,1,viagens, l+1, r+1)) << endl;
  65.             }
  66.         }
  67.         cout << endl;
  68.     }
  69.     return 0;
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement