Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- static bool cmp(vector<int>& a,vector<int>& b)
- {
- if(a[0]<b[0])
- return true;
- else
- return false;
- }
- void asb(long long node,int i,int j,vector<vector<int>>& nums,vector<int>& a)
- {
- if(i==j)
- {
- a[node]=nums[i][1];
- return ;
- }
- else
- {
- int mid=i+(j-i)/2;
- asb(2*node+1,i,mid,nums,a);
- asb(2*node+2,mid+1,j,nums,a);
- a[node]=max(a[2*node+1],a[2*node+2]);
- }
- }
- int maxval(int start,int end,int l,int r,long long node,vector<int>& a)
- {
- if(start==l && end==r)
- {
- return a[node];
- }
- else
- {
- int mid=start+(end-start)/2;
- if(l<=mid && r>mid)
- {
- int f=maxval(start,mid,l,mid,2*node+1,a);
- int b=maxval(mid+1,end,mid+1,r,2*node+2,a);
- return max(f,b);
- }
- if(r<=mid)
- return maxval(start,mid,l,r,2*node+1,a);
- else
- return maxval(mid+1,end,l,r,2*node+2,a);
- }
- }
- int maxRange(vector<int>& a,int left, int right,int size) {
- int d=maxval(0,size,left,right,0,a);
- return d;
- }
- vector<int> solve(int N ,vector<vector<int>>& arr,int Q,vector<vector<int>> & query)
- {
- vector<int> a(4*arr.size());
- sort(arr.begin(),arr.end(),cmp);
- asb(0,0,arr.size()-1,arr,a);
- vector<int> ans;
- for(auto i: query)
- { sort(i.begin(),i.end());
- int start=0,end=arr.size()-1;
- while(start<=end)
- {
- int mid=start+(end-start)/2;
- if(arr[mid][0]>=i[0])
- end=mid-1;
- else
- start=mid+1;
- }
- int start_idx=start;
- start=0,end=arr.size()-1;
- while(start<=end)
- {
- int mid=start+(end-start)/2;
- if(arr[mid][0]>i[1])
- end=mid-1;
- else
- start=mid+1;
- }
- if(start_idx>end)
- ans.push_back(-1);
- else
- ans.push_back(maxRange(a,start_idx,end,arr.size()-1));
- }
- return ans;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement