[ LightOJ ] 1082- Array Queries

Author            : Anwar Jahid Ruman Hossain 
                    CSE, Batch - 6
                    BRUR.
Problem Statement : [ LightOJ ] 1082- Array Queries
Source            : Light OJ
Category          : Segment Tree
Algorithm         : Segment Tree
Verdict           : Accepted
  1. #include<bits/stdc++.h>  
  2. using namespace std;  
  3. #define ll long long int  
  4. #define mx 100005  
  5. int tree[mx*3];  
  6. int arr[mx];  
  7. void build_segment(int node,int left,int right){  
  8.     if(left==right){  
  9.         tree[node]=arr[left]; //leaf node value set  
  10.         //cout<<"Index "<<node<<": "<<tree[node]<<endl;  
  11.         return;  
  12.     }  
  13.     int mid=(left+right)/2;  
  14.     build_segment(node*2, left, mid); //left subtree build  
  15.     build_segment(node*2 + 1, mid+1, right); //right subtree build  
  16.     tree[node]=min(tree[node*2], tree[node*2 + 1]); //parent min value set  
  17.     //cout<<"IndexMin "<<node<<": "<<tree[node]<<endl;  
  18. }  
  19. int query_seqment(int node,int left,int right,int ia,int ib){  
  20.   
  21.     if(ia>right || ib<left)  
  22.         return INT_MAX;  
  23.     if(left>=ia && right<=ib)  
  24.         return tree[node];  
  25.     int mid=(left+right)/2;  
  26.     int p=query_seqment(node*2, left, mid, ia, ib); //left parent query  
  27.     int q=query_seqment(node*2 + 1, mid+1, right, ia, ib); //right parent query  
  28.     return min(p,q);  
  29.   
  30.   
  31. }  
  32. int main(){  
  33.     //freopen("input.txt","r",stdin);  
  34.     //freopen("output.txt","w",stdout);  
  35.     int t;  
  36.     scanf("%d",&t);  
  37.     for(int tc=1;tc<=t;tc++){  
  38.         int n,q;  
  39.         scanf("%d%d",&n,&q);  
  40.         for(int i=1;i<=n;i++){  
  41.             scanf("%d",&arr[i]);  
  42.         }  
  43.         //root node, left most node, right most node  
  44.         build_segment(1,1,n);  
  45.         int ia,ib;  
  46.         printf("Case %d:\n",tc);  
  47.         for(int i=1;i<=q;i++){  
  48.             scanf("%d%d",&ia,&ib);  
  49.             //root, left most, right most, from node, to node  
  50.             printf("%d\n",query_seqment(1,1,n,ia,ib));  
  51.         }  
  52.     }  
  53.     return 0;  
  54. }  

No comments:

Post a Comment