有3种结果
分析2种结果,其余就是剩下那个结果
True
1.x年存在
2.y年存在
3.中间都需要存在
4.中间的最大值要小于x年的降雨量 mx<ri[x]
5.ri[x]<=ri[y]
False
1.x年存在 mx>=ri[x]
2.y年存在 mx>=ri[y]
3.x年存在,y年存在 ri[x]>ri[y]
其余都是maybe
分析完每个结果的条件
获得条件
1.mx,区间最大值,线段树维护即可
2.中间都要存在,观察题目y[i]<y[i+1],单调性,那二分找index就好了
indexx-indexy==x-y那中间就都存在了
那这样处理就写完了
// Problem: [SCOI2007]降雨量
// Contest: NowCoder
// URL: https://ac.nowcoder.com/acm/contest/26896/1004
// Memory Limit: 524288 MB
// Time Limit: 2000 ms
//
// Powered by CP Editor (https://cpeditor.org)#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N = 1e6+ 9;
int ye[N],ri[N];
//线段树
struct node{int mx;
}seg[N<<2];
inline ll tl(ll x){return x<<1;}
inline ll tr(ll x){return x<<1|1;}
bool inrange(int L,int R,int l,int r){return l<=L && R<=r;}
bool outofrange(int L,int R,int l,int r){return L>r || R<l;}
void pushup(int id){seg[id].mx=max(seg[tl(id)].mx,seg[tr(id)].mx);
}
ll query(int id,int L,int R,int l,int r){if(inrange(L,R,l,r)){return seg[id].mx;}else if(!outofrange(L,R,l,r)){int mid=(L+R)>>1;return max(query(tl(id),L,mid,l,r),query(tr(id),mid+1,R,l,r));}else{return 0;}
}
void insert(int id,int l,int r,int pos,int v){if(l==r){seg[id].mx=v;return;}int mid=(l+r)>>1;if(mid>=pos){insert(tl(id),l,mid,pos,v);}else{insert(tr(id),mid+1,r,pos,v);}pushup(id);
}
int main() {ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);int n;cin>>n;for(int i=1;i<=n;i++){cin>>ye[i]>>ri[i];insert(1,1,n,i,ri[i]);}int m;cin>>m;for(int i=1;i<=m;i++){int y,x;cin>>y>>x;int indexy=lower_bound(ye+1,ye+1+n,y)-ye;int indexx=lower_bound(ye+1,ye+1+n,x)-ye;bool okx=false;bool oky=false;if(ye[indexy]==y){oky=true;}if(ye[indexx]==x){okx=true;}if(!oky){indexy--;}int mx=0;// cout<<indexx+1<<" "<<indexy-1<<'\n';if(indexy+1<=indexx-1){mx=query(1,1,n,indexy+1,indexx-1);}// cout<<mx<<'\n';if(okx && oky && x-y==indexx-indexy && mx<ri[indexx] && ri[indexx]<=ri[indexy]){cout<<"true"<<'\n';}else if((okx && mx>=ri[indexx]) || (oky && ri[indexy]<=mx) || (okx && oky && ri[indexx]>ri[indexy])){cout<<"false"<<'\n';}else{cout<<"maybe"<<'\n';}}return 0;
}