记录编号 306405 评测结果 AAAAAAA
题目名称 基本的图问题 最终得分 100
用户昵称 GravatarRiolu 是否通过 通过
代码语言 C++ 运行时间 1.000 s
提交时间 2016-09-11 22:38:07 内存使用 22.85 MiB
显示代码纯文本
/*
Riolu 
2016-9-11
*/
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
#define N 200001
int n,m;
int a[N];
int f[N][25][2];//0 max 1 min
int fa[N];
void RMQ(){
	int i,j;
	for(j=1;j<=(log(n)/log(2));j++)
		for(i=1;i<=n;i++){
			f[i][j][0]=max(f[i][j-1][0],f[i+(1<<(j-1))][j-1][0]);
			f[i][j][1]=min(f[i][j-1][1],f[i+(1<<(j-1))][j-1][1]);
			}
	}
int rm(int i,int j,int x){
	int k=log(j-i+1)/log(2);
	if(x)return min(f[i][k][1],f[j-(1<<k)+1][k][1]);
	else return max(f[i][k][0],f[j-(1<<k)+1][k][0]);
	}
	
int fin(int a){
	if(fa[a]!=a)fa[a]=fin(fa[a]);
	return fa[a];
	}

void uni(int a,int b){
	fa[a]=fin(a);
	fa[b]=fin(b);
	fa[fa[a]]=fa[b];
	}

int RIOLU(){
	
	freopen("basicgraph.in","r",stdin);
	freopen("basicgraph.out","w",stdout);

	int i,l,r;
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	{scanf("%d",&a[i]);f[i][0][0]=f[i][0][1]=a[i];}

	RMQ();

	for(i=1;i<=n;i++)fa[i]=i;
	scanf("%d",&m);
	for(i=1;i<=m;i++){
		scanf("%d %d",&l,&r);
		uni(rm(l,r,0),rm(l,r,1));
		}
	scanf("%d",&m);
		
	for(i=1;i<=m;i++){
		scanf("%d %d",&l,&r);
		if(fin(l)==fin(r))printf("YES\n");
			else printf("NO\n");
		}
	return 0;
	}
int RN=RIOLU();
int main(){;}