Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- #define mx 100001
- using namespace std;
- int ara[mx];
- int tree[mx*4];
- void init(int node,int b,int e){
- if(b==e){
- tree[node]=ara[b];
- return ;
- }
- int mid=(b+e)/2;
- init(2*node,b,mid);
- init(2*node+1,b=mid+1,e);
- tree[node] =min(tree[2*node],tree[2*node+1]);
- }
- int query(int node,int b,int e,int i,int j){
- if(i>e || j<b)
- return INT_MAX;
- int mid =(b+e)/2;
- if(b>=i && e<=j)
- return tree[node];
- int p1=query(2*node,b,mid,i,j);
- int p2=query(2*node+1,mid+1,e,i,j);
- return min(p1,p2);
- }
- int main(){
- int n,q,l,r,t;
- scanf("%d", &t);
- for(int tt=1;tt<=t;tt++){
- scanf("%d%d",&n,&q);
- for(int i=1;i<=n;i++) scanf("%d",&ara[i]);
- init(1,1,n);
- printf("Case %d:\n",tt);
- for(int i=1;i<=q;i++){
- scanf("%d%d",&l,&r);
- printf("%d\n",query(1,1,n,l,r));
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement