社区讨论

水题求条闭关

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 条回复,欢迎继续交流。

正在加载回复...