社区讨论
水题求条闭关
P2471[SCOI2007] 降雨量参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mm33a1q8
- 此快照首次捕获于
- 2026/02/26 14:35 2 周前
- 此快照最后确认于
- 2026/02/26 14:49 2 周前
CPP
#include <bits/stdc++.h>
using namespace std;
map<int,int>mp,ap;
const int maxn = 1e5+100;
int f[maxn][30],lg[maxn],y[maxn],r[maxn];
int n,cnt;
void init(){
for(int i = 2;i<=cnt;i++)lg[i] = lg[i/2]+1;
for(int j = 1;j<=lg[cnt];j++){
for(int i = 1;i+(1<<j)-1<=cnt;i++){
f[i][j] = max(f[i][j-1],f[i+(1<<j-1)][j-1]);
}
}
}
int get(int x,int y){
int len = y-x+1;
return max(f[x][lg[len]],f[y-(1<<lg[len])+1][lg[len]]);
}
int main(){
int m;
cin>>n;
for(int i = 1;i<=n;i++){
cin>>y[i];
if(!mp[y[i]])mp[y[i]] = ++cnt;
y[i] = mp[y[i]];
cin>>r[y[i]];
f[y[i]][0] = r[y[i]];
}
init();
cin>>m;
int x,y;
while(m--){
cin>>x>>y;
if(r[mp[x]]<r[mp[y]]){
cout<<"false\n";
continue;
}
if(mp[x]+1 != mp[y] && get(mp[x]+1,mp[y]-1)>=r[mp[y]]){
cout<<"false\n";
continue;
}
if(y-x+1>mp[y]-mp[x]+1){
cout<<"maybe\n";
continue;
}
cout<<"true\n";
}
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...