Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- #define sc(in) scanf("%d",&in)
- #define mx 1000005
- ll tree[mx*3],arr[mx];
- using namespace std;
- void init(int node, int strt, int fin)
- {
- if(strt==fin)
- {
- // cout<<node<<endl;
- tree[node] = arr[strt];
- return arr[strt];
- }
- int left = node*2;
- int right = node*2 +1;
- int mid = (strt+fin)/2;
- init(left,strt,mid);
- init(right,mid+1,fin);
- tree[node] = min(tree[left],tree[right]);
- }
- int mincal(int node, int b, int e, int i,int j)
- {
- if(j<b || i>e)
- return INT_MAX;
- if(i<=b && j>=e)
- {
- //cout<<tree[node]<<endl;
- return tree[node];
- }
- int left = node*2;
- int right = node*2 +1;
- int mid = (b+e)/2;
- int q1 = mincal(left,b,mid,i,j);
- int q2 = mincal(right,mid+1,e,i,j);
- //cout<<node<<endl;
- int x = min(q1,q2);
- return x;
- }
- int main()
- {
- int n,q;
- scanf("%d",&n);
- for(int i = 1; i<=n; i++)
- {
- sc(arr[i]);
- }
- init(1,1,n);
- int a,b;
- cin>>q;
- while(q--)
- {
- scanf("%d %d",&a,&b);
- int ans = mincal(1,1,n,a+1,b+1);
- printf("%d\n",ans);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment