Advertisement
Guest User

Untitled

a guest
May 5th, 2020
195
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.94 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. struct node
  4. {
  5.     int val;
  6.     node *l,*r;
  7.     void pull(){val=max(l->val,r->val);}
  8. };
  9.  
  10. int ans[100000];
  11. void build(node *now,int l,int r)
  12. {
  13.     if(r==l)
  14.     {
  15.         now->val=ans[l];
  16.         return;
  17.     }
  18.     int mid=(l+r)/2;
  19.     build(now->l=new node(),l,mid); build(now->r=new node(),mid+1,r);
  20.     now->pull();
  21. }
  22. int query(node *a,int ql,int qr,int l,int r)
  23. {
  24.     if(qr<l||ql>qr) return -1;
  25.     if(r<=qr&&l>=ql) return a->val;
  26.     int mid=(l+r)/2;
  27.     return max(query(a->l,ql,qr,1,mid),query(a->r,ql,qr,mid+1,r));
  28. }
  29. int main()
  30. {
  31.     ios_base::sync_with_stdio(0);
  32.     cin.tie(0);
  33.     node *root;
  34.     root=new node();
  35.     int a,ch;
  36.     cin>>a;
  37.     for(int i=1;i<=a;i++)
  38.     {
  39.         cin>>ans[i];
  40.     }
  41.     build(root,1,a);
  42.     cin>>ch;
  43.     for(int i=1;i<=ch;i++)
  44.     {
  45.         int b,c;
  46.         cin>>b>>c;
  47.         cout<<query(root,b,c,1,a)<<endl;
  48.     }
  49.     return 0;
  50. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement