Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- #define FAST_IO ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
- #define mx 100005
- int tree[mx*3];
- int arr[mx];
- void build_segment(int node,int left,int right){
- if(left==right){
- tree[node]=arr[left];
- //cout<<"Index "<<node<<": "<<tree[node]<<endl;
- return;
- }
- int mid=(left+right)/2;
- build_segment(node*2, left, mid); //left subtree
- build_segment(node*2 + 1, mid+1, right); //right subtree
- tree[node]=min(tree[node*2], tree[node*2 + 1]);
- //cout<<"IndexMin "<<node<<": "<<tree[node]<<endl;
- }
- int query_seqment(int node,int left,int right,int ia,int ib){
- if(left>=ia && right<=ib)
- return tree[node];
- if(ia>right || ib<left)
- return INT_MAX;
- int mid=(left+right)/2;
- int p=query_seqment(node*2, left, mid, ia, ib); //left child query
- int q=query_seqment(node*2 + 1, mid+1, right, ia, ib); //right child query
- return min(p,q);
- }
- int main(){
- FAST_IO
- //freopen("input.txt","r",stdin);
- //freopen("output.txt","w",stdout);
- int t;
- cin>>t;
- for(int tc=1;tc<=t;tc++){
- int n,q;
- cin>>n>>q;
- for(int i=1;i<=n;i++){
- cin>>arr[i];
- }
- //root node, left most node, right most node
- build_segment(1,1,n);
- int ia,ib;
- cout<<"Case "<<tc<<":"<<endl;
- for(int i=1;i<=q;i++){
- cin>>ia>>ib;
- //root, left most, right most, from node, to node
- cout<<query_seqment(1,1,n,ia,ib)<<endl;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement