Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- struct node
- {
- int val;
- node *l,*r;
- void pull(){val=max(l->val,r->val);}
- };
- int ans[100000];
- void build(node *now,int l,int r)
- {
- if(r==l)
- {
- now->val=ans[l];
- return;
- }
- int mid=(l+r)/2;
- build(now->l=new node(),l,mid); build(now->r=new node(),mid+1,r);
- now->pull();
- }
- int query(node *a,int ql,int qr,int l,int r)
- {
- if(qr<l||ql>qr) return -1;
- if(r<=qr&&l>=ql) return a->val;
- int mid=(l+r)/2;
- return max(query(a->l,ql,qr,1,mid),query(a->r,ql,qr,mid+1,r));
- }
- int main()
- {
- ios_base::sync_with_stdio(0);
- cin.tie(0);
- node *root;
- root=new node();
- int a,ch;
- cin>>a;
- for(int i=1;i<=a;i++)
- {
- cin>>ans[i];
- }
- build(root,1,a);
- cin>>ch;
- for(int i=1;i<=ch;i++)
- {
- int b,c;
- cin>>b>>c;
- cout<<query(root,b,c,1,a)<<endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement