Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<climits>
- #include<math.h>
- #include <algorithm>
- #include<iostream>
- using namespace std;
- void constructMinSegmentTree(int segmentTree[], int input[], int low, int high,int pos){
- if(low == high){
- segmentTree[pos] = input[low];
- return;
- }
- int mid = (low + high)/2;
- constructMinSegmentTree(segmentTree, input, low, mid, 2 * pos + 1);
- constructMinSegmentTree(segmentTree, input, mid + 1, high, 2 * pos + 2);
- segmentTree[pos] = min(segmentTree[2*pos+1], segmentTree[2*pos+2]);
- }
- int createSegmentTree(int segmentTree[], int input[], int len)
- {
- int powerOf2=1;
- while(powerOf2<=len)
- powerOf2*=2;
- for(int i=0; i < powerOf2*2-1; i++){
- segmentTree[i] = INT_MAX;
- }
- constructMinSegmentTree(segmentTree, input, 0, len - 1, 0);
- }
- int rangeMinimumQuery(int segmentTree[],int low,int high,int qlow,int qhigh,int pos){
- if(qlow <= low && qhigh >= high){
- return segmentTree[pos];
- }
- if(qlow > high || qhigh < low){
- return INT_MAX;
- }
- int mid = (low+high)/2;
- return min(rangeMinimumQuery(segmentTree, low, mid, qlow, qhigh, 2 * pos + 1),
- rangeMinimumQuery(segmentTree, mid + 1, high, qlow, qhigh, 2 * pos + 2));
- }
- int main()
- {
- int input[6];
- for(int i=0;i<6;i++)
- input[i]=i;
- int segmentTree[7];
- createSegmentTree(segmentTree, input, 6);
- for(int i=0;i<3;i++)
- {
- int val=rangeMinimumQuery(segmentTree,0, 6, i, i+3, 0);
- cout<<"min: "<<val<<endl;
- }
- system("PAUSE");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement