| 比赛 | 防止浮躁的小练习v0.5 | 评测结果 | AAATAAT | 
    | 题目名称 | 基本的图问题 | 最终得分 | 71 | 
    | 用户昵称 | Kulliu | 运行时间 | 2.118 s | 
    | 代码语言 | C++ | 内存使用 | 1.07 MiB | 
    | 提交时间 | 2016-10-15 16:53:30 | 
显示代码纯文本
/*************************
 Personal idea of level-1
**************************/
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
using namespace std;
#define INF 0x7fffffff
typedef long long LL;
const int SIZE = 100010;
int fa[SIZE],m,n,node[SIZE];//fmax[SIZE][SIZE],fmin[SIZE][SIZE];
int find(int x){
    if(fa[x]!=x)
        return fa[x]=find(fa[x]);
    return x;
}
void Union(int u,int v){
    int fu=find(u),fv=find(v);
    fa[fu]=fv;
}
void init(){
    int s,e;
    //memset(fmin,0x7f,sizeof(fmin));
    scanf("%d",&n);
    //scanf("%d",&node[i]);fmax[1][1]=fmin[1][1]=node[1];
    for(int i=1;i<=n;i++)scanf("%d",&node[i]),fa[i]=i;
    scanf("%d",&m);
    for(int i=1;i<=m;i++){
        scanf("%d%d",&s,&e);
        int max=0,min=INF;
        for(int j=s;j<=e;j++){
            if(node[j]>max)max=node[j];
            if(node[j]<min)min=node[j];
        }
		Union(max,min);
    }
}
int main(){
	freopen("basicgraph.in","r",stdin);
	freopen("basicgraph.out","w",stdout);
    int k,x,y;
    init();
    scanf("%d",&k);
    while(k--)
    {
        scanf("%d%d",&x,&y);
        if(find(x)==find(y))printf("YES\n");
        else printf("NO\n");
    }
    fclose(stdin);fclose(stdout);
    return 0;
}