Advertisement
Guest User

Untitled

a guest
Jan 20th, 2017
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.78 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. int getmax(int tree[], int id, int id_left, int id_right, int ans_left, int ans_right){
  6.     if(id_right <= ans_left || ans_right <= id_left)
  7.         return 0;
  8.     if(ans_left <= id_left &&  id_right <= ans_right)
  9.         return tree[id];
  10.     int m = (id_left + id_right) / 2;
  11.     return max(getmax(tree, 2 * id, id_left, m, ans_left, ans_right), getmax(tree, 2 * id + 1, m, id_right, ans_left, ans_right));
  12. }
  13.  
  14. void build (int tree[], int a[], int v, int tl, int tr) {
  15.     if (tl == tr)
  16.         tree[v] = a[tl];
  17.     else {
  18.         int tm = (tl + tr) / 2;
  19.         build (tree, a, v*2, tl, tm);
  20.         build (tree, a, v*2+1, tm + 1, tr);
  21.         tree[v] = max(tree[v*2], tree[v*2+1]);
  22.     }
  23. }
  24.  
  25. void update(int tree[], int id, int id_left, int id_right, int val, int ans_id){
  26.     if(ans_id == id_left && id_right == id_left + 1){
  27.         tree[id] = val;
  28.         return;
  29.     }
  30.     int m = (id_left + id_right) / 2;
  31.     if(ans_id >= m)
  32.         update(tree, 2 * id, m, id_right, ans_id, val);
  33.     else
  34.         update(tree, 2 * id, id_left, m, ans_id, val);
  35.     tree[id] = max(tree[id * 2], tree[id * 2 + 1]);
  36.  
  37. }
  38.  
  39. void push(int tree[], int excess[], int id, int id_left, int id_right){
  40.     tree[id] += (id_right - id_left) * excess[id];
  41.     if (id_right > id_left + 1){
  42.         excess[2 * id] += excess[id];
  43.         excess[2 * id + 1] += excess[id];
  44.     }
  45.     excess[id] = 0;
  46. }
  47.  
  48. int main()
  49. {
  50.     int n;
  51.     cin >> n;
  52.     int tree[4*n];
  53.     int a[n];
  54.     for(int i = 0; i < n; ++i){
  55.         int t;
  56.         cin >> t;
  57.         a[i] = t;
  58.     }
  59.     build(tree, a, 1, 0, n - 1);
  60.     int k;
  61.     cin >> k;
  62.     for(int i = 0; i < k; ++i){
  63.         int l, r;
  64.         cin >> l >> r;
  65.         cout << getmax(tree, 1, 0, n - 1, l - 1, r - 1) << endl;
  66.     }
  67.     return 0;
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement