Guest User

Untitled

a guest
Jul 10th, 2017
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.95 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const int N = 1e5 + 5;
  5.  
  6. int A[N], tree[4 * N];
  7.  
  8. int merge(int a, int b)
  9. {
  10.     if(A[a] > A[b])
  11.         return a;
  12.     return b;
  13. }
  14.  
  15. void build(int node, int l, int r)
  16. {
  17.     if(l > r)
  18.         return;
  19.  
  20.     if(l == r) {
  21.         tree[node] = l;
  22.         return;
  23.     }
  24.  
  25.     int m = (l + r) / 2;
  26.     build(2*node, l , m);
  27.     build(2*node + 1, m + 1, r);
  28.  
  29.     tree[node] = merge(tree[2*node], tree[2*node + 1]);
  30. }
  31.  
  32. int query(int node, int l, int r, int x, int y)
  33. {
  34.     if(l > r or l > y or r < x)
  35.         return 0;
  36.  
  37.     if(l >= x and r <= y)
  38.         return tree[node];
  39.  
  40.     int m = (l + r) / 2;
  41.     int q1 = query(2*node, l, m, x, y);
  42.     int q2 = query(2*node + 1, m + 1, r, x, y);
  43.  
  44.     return merge(q1, q2);
  45. }
  46.  
  47. int main()
  48. {
  49.     int n, m;                   // n : no. of elements, m : no. of queries
  50.     cin>>n>>m;
  51.  
  52.     for(int i = 1; i <= n; i++)
  53.         cin>>A[i];
  54.  
  55.     build(1, 1, n);
  56.  
  57.     while(m--)
  58.     {
  59.         int l, r;
  60.         cin>>l>>r;
  61.         cout<<query(1, 1, n, l, r)<<"\n";
  62.     }
  63.  
  64.     return 0;
  65. }
Add Comment
Please, Sign In to add comment