Advertisement
Guest User

Untitled

a guest
Jun 25th, 2017
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.59 KB | None | 0 0
  1. #include<climits>
  2. #include<math.h>
  3. #include <algorithm>
  4. #include<iostream>
  5. using namespace std;
  6.  
  7. void constructMinSegmentTree(int segmentTree[], int input[], int low, int high,int pos){
  8. if(low == high){
  9. segmentTree[pos] = input[low];
  10. return;
  11. }
  12. int mid = (low + high)/2;
  13. constructMinSegmentTree(segmentTree, input, low, mid, 2 * pos + 1);
  14. constructMinSegmentTree(segmentTree, input, mid + 1, high, 2 * pos + 2);
  15. segmentTree[pos] = min(segmentTree[2*pos+1], segmentTree[2*pos+2]);
  16. }
  17.  
  18.  
  19. int createSegmentTree(int segmentTree[], int input[], int len)
  20. {
  21. int powerOf2=1;
  22. while(powerOf2<=len)
  23. powerOf2*=2;
  24. for(int i=0; i < powerOf2*2-1; i++){
  25. segmentTree[i] = INT_MAX;
  26. }
  27. constructMinSegmentTree(segmentTree, input, 0, len - 1, 0);
  28. }
  29.  
  30.  
  31. int rangeMinimumQuery(int segmentTree[],int low,int high,int qlow,int qhigh,int pos){
  32. if(qlow <= low && qhigh >= high){
  33. return segmentTree[pos];
  34. }
  35. if(qlow > high || qhigh < low){
  36. return INT_MAX;
  37. }
  38. int mid = (low+high)/2;
  39. return min(rangeMinimumQuery(segmentTree, low, mid, qlow, qhigh, 2 * pos + 1),
  40. rangeMinimumQuery(segmentTree, mid + 1, high, qlow, qhigh, 2 * pos + 2));
  41. }
  42. int main()
  43. {
  44.  
  45. int input[6];
  46. for(int i=0;i<6;i++)
  47. input[i]=i;
  48. int segmentTree[7];
  49. createSegmentTree(segmentTree, input, 6);
  50. for(int i=0;i<3;i++)
  51. {
  52. int val=rangeMinimumQuery(segmentTree,0, 6, i, i+3, 0);
  53. cout<<"min: "<<val<<endl;
  54. }
  55. system("PAUSE");
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement