Advertisement
shamiul93

LightOJ 1082 - Array Queries Concept

Apr 1st, 2017
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.88 KB | None | 0 0
  1. /**
  2. Problem - 1082 - Array Queries
  3. Concept - Segment Tree
  4. */
  5.  
  6. #include <bits/stdc++.h>
  7. #define ll                                      long long
  8. #define fi                                      freopen("in.txt", "r", stdin)
  9. #define fo                                      freopen("out.txt", "w", stdout)
  10. #define m0(a) memset(a , 0 , sizeof(a))
  11. #define m1(a) memset(a , -1 , sizeof(a))
  12.  
  13. using namespace std;
  14.  
  15. ll N, q ;
  16. ll i, j ;
  17.  
  18. int *arr ;
  19. int *seg ;
  20.  
  21. int conseg(int lo, int hi, int sp)
  22. {
  23.     if(lo == hi)
  24.     {
  25.         seg[sp] = arr[lo] ;
  26.         return seg[sp] ;
  27.     }
  28.     ll mid ;
  29.     mid = (lo+hi) / 2 ;
  30.  
  31.     seg[sp] = min( conseg(mid+1, hi, 2*sp + 2), conseg(lo, mid, 2*sp + 1) ) ;
  32.     return seg[sp] ;
  33. }
  34.  
  35. void initseg()
  36. {
  37.     ll max_size , x  ;
  38.     x = ceil(log2(N)) + 1 ;
  39.     max_size = pow(2 , x) - 1 ;
  40.  
  41.     free(seg) ;
  42.     seg = new int[max_size] ;
  43.     for(ll i = 0 ; i < max_size ; i++)
  44.     {
  45.         seg[i] = 9999 ;
  46.     }
  47.     conseg(0, N-1, 0);
  48. }
  49.  
  50. void consarr()
  51. {
  52.     free(arr) ;
  53.     arr = new int[N+10] ;
  54.  
  55.     for(ll i = 0 ; i < N ; i++)
  56.     {
  57.         scanf("%d",&arr[i]) ;
  58.     }
  59. }
  60.  
  61. int query(int lo, int hi, int pos)
  62. {
  63.     if(i <= lo && j >= hi)
  64.     {
  65.         return seg[pos] ;
  66.     }
  67.     if(j < lo || i > hi)
  68.     {
  69.         return INT_MAX ;
  70.     }
  71.  
  72.     int mid ;
  73.     mid = (lo+hi) / 2 ;
  74.  
  75.     return min(query(lo, mid, 2*pos+1), query(mid+1, hi, 2*pos+2)) ;
  76. }
  77.  
  78. int main()
  79. {
  80. //    fi ;
  81. //    fo ;
  82.  
  83.     ll T, t = 0 ;
  84.     scanf("%lld",&T);
  85.  
  86.     while(T--)
  87.     {
  88.         t++ ;
  89.         scanf("%lld %lld",&N, &q);
  90.         consarr() ;
  91.         initseg() ;
  92.  
  93.         printf("Case %d:\n",t);
  94.         while(q--)
  95.         {
  96.             scanf("%lld %lld",&i, &j) ;
  97.             i-- ;
  98.             j-- ;
  99.             int p ;
  100.             p = query(0, N-1, 0);
  101.             printf("%d\n",p) ;
  102.         }
  103.     }
  104.  
  105.     return 0 ;
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement