社区讨论
90 ? 求助
P2471[SCOI2007] 降雨量参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @lryicix7
- 此快照首次捕获于
- 2024/01/29 13:47 2 年前
- 此快照最后确认于
- 2024/01/29 14:07 2 年前
CPP
#include <bits/stdc++.h>
using namespace std;
#define int long long
int st_max[1000010][40],Log2[1000010],n,m,x,y;
struct node{
int year;
int rain;
}a[1000010];
map<int,int>ma;
int work(int l,int r){
// if(l>r)swap(l,r);
int k=Log2[r-l+1];
return max(st_max[l][k],st_max[r-(1<<k)+1][k]);
}
int find(int target){
int l=1,r=n,mid;
while(l<r){
mid=(l+r+1)>>1;
if(a[mid].year<=target)l=mid;
else r=mid-1;
}
return l;
}
int find2(int target){
int l=1,r=n,mid;
while(l<r){
mid=(l+r)>>1;
if(a[mid].year>=target)r=mid;
else l=mid+1;
}
return l;
}
signed main(){
// freopen("a.in","r",stdin);
// freopen("a.out","w",stdout);
Log2[1]=0;
for(int i=2;i<=200001;i++)Log2[i]=Log2[i>>1]+1;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i].year>>a[i].rain;
ma[a[i].year]=i;
st_max[i][0]=a[i].rain;
}
for(int j=1;j<=Log2[n];j++){
for(int i=1;i+(1<<j)-1<=n;i++){
st_max[i][j]=max(st_max[i][j-1],st_max[i+(1<<(j-1))][j-1]);
}
}
// int tmp;
// cin>>tmp;
// cout<<find2(tmp);
cin>>m;
while(m--){
cin>>y>>x;
int posx=ma[x],posy=ma[y];
if(posx && posy){
if(a[posx].rain>a[posy].rain){
puts("false");
}
else if(work(posy+1,posx-1)>=a[posx].rain && posy!=posx-1){
puts("false");
}
else if(posx-posy<x-y){
puts("maybe");
}
else{
puts("true");
}
}
else if(posx==0 && posy){
if(work(posy+1,find(x))>a[posy].rain && posy!=find(x)){
puts("false");
}
else puts("maybe");
}
else if(posx && posy==0){
if(work(find2(y),posx-1)>=a[posx].rain && find2(y)!=posx){
puts("false");
}
else puts("maybe");
}
else{
puts("maybe");
}
}
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...