Advertisement
apl-mhd

segmentTreeConstruct

Jul 28th, 2017
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.32 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <climits>
  4. using namespace std;
  5.  
  6. int inf = INT_MAX; 
  7.  
  8. int segment[100]={0};
  9.  
  10. void constructTree(int number[],int start, int end, int pos){
  11.    
  12.     segment[pos]=0;
  13.    
  14.     if(start == end){
  15.        
  16.         segment[pos] = number[start];
  17.         return;
  18.     }
  19.  
  20.     int mid = (start+end) / 2;
  21.    
  22.     constructTree(number, start, mid, pos*2);
  23.     constructTree(number, mid+1, end, pos*2+1);
  24.    
  25.     segment[pos] = min(segment[pos*2],segment[pos*2+1]);
  26.    
  27.    
  28.    
  29.     }
  30.  
  31.  
  32. int query(int start, int end, int qstart, int qend, int pos){
  33.    
  34.    
  35.         if(start >= qstart && end<=qend)
  36.             return segment[pos];
  37.        
  38.            
  39.         if(start > qend || end<qstart)
  40.             return inf;
  41.            
  42.     int mid = (start + end) /2;
  43.     int x = query(start,mid, qstart, qend, pos*2);
  44.     int y = query(mid+1, end, qstart, qend, pos*2+1);
  45.    
  46.     return min(x,y);
  47.    
  48. }
  49.  
  50.  
  51. int main(int argc, char **argv)
  52. {
  53.    
  54.  
  55.     /*                 0  1   2    3   3 5 6  7  */
  56.     int number[8] = {-11,-1,-100,-400,-2,6,7,-1111};
  57.    
  58.     int size = sizeof(number)/sizeof(number[0])-1;
  59.    
  60.  
  61.     constructTree(number,0,size, 1);
  62.    
  63.    
  64.     //for(int  i=0; i<20; i++)
  65.    
  66.         //cout<<i<<":"<<segment[i]<<" \n";
  67.    
  68.    
  69.     cout<<query(0, size, 0, 7,1)<<"\n";
  70.     cout<<query(0, size, 0, 3,1)<<"\n";
  71.     cout<<query(0, size, 4, 7,1)<<"\n";
  72.     cout<<query(0, size, 1, 3,1)<<"\n";
  73.    
  74.    
  75.    
  76.    
  77.    
  78.     return 0;
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement