Winner

南昌邀请赛 暴力模拟
#include<bits/stdc++.h>
using namespace std;
struct Nod
{
    int i;
    int a,b,c;
} A[100004];
bool f[100004];
int B[100004][3];
bool cmp1(Nod a,Nod b)
{
    return a.a<b.a;
}
bool cmp2(Nod a,Nod b)
{
    return a.b<b.b;
}
bool cmp3(Nod a,Nod b)
{
    return a.c<b.c;
}
int main()
{
    int N,Q;
    scanf("%d%d",&N,&Q);
    int t;
    for(int i=0; i<=N-1; i++)
    {
        scanf("%d",&t);
        A[i].i=i+1;
        A[i].a=t;
    }
    for(int i=0; i<=N-1; i++)
    {
        scanf("%d",&t);
        A[i].b=t;
    }
    for(int i=0; i<=N-1; i++)
    {
        scanf("%d",&t);
        A[i].c=t;
    }
    bool g=0;
    sort(A,A+N,cmp1);
    f[A[N-1].i]=1;
    for(int i=0; i<N; i++)
    {
        B[i][0]=A[i].i;
    }
    sort(A,A+N,cmp2);
    f[A[N-1].i]=1;
    g=0;
    for(int i=0; i<N; i++)
    {
        B[i][1]=A[i].i;
        if(f[A[i].i])
        {
            g=1;
        }
        if(g&&f[A[i].i]==0)
        {
            f[A[i].i]=1;
        }
    }
    sort(A,A+N,cmp3);
    f[A[N-1].i]=1;
    g=0;
    for(int i=0; i<N; i++)
    {
        B[i][2]=A[i].i;
        if(f[A[i].i])
        {
            g=1;
        }
        if(g&&f[A[i].i]==0)
        {
            f[A[i].i]=1;
        }
    }
    while(true)
    {
        bool ch=0;
        g=0;
        for(int i=0; i<N; i++)
        {
            if(f[B[i][0]])
            {
                g=1;
            }
            if(g&&f[B[i][0]]==0)
            {
                ch=1;
                f[B[i][0]]=1;
            }
        }
        g=0;
        for(int i=0; i<N; i++)
        {
            if(f[B[i][1]])
            {
                g=1;
            }
            if(g&&f[B[i][1]]==0)
            {
                ch=1;
                f[B[i][1]]=1;
            }
        }
        g=0;
        for(int i=0; i<N; i++)
        {
            if(f[B[i][2]])
            {
                g=1;
            }
            if(g&&f[B[i][2]]==0)
            {
                ch=1;
                f[B[i][2]]=1;
            }
        }
        if(!ch)break;
    }
    while(Q--)
    {
        scanf("%d",&t);
        if(f[t])
        {
            puts("YES");
        }
        else puts("NO");
    }
}

 

posted @ 2019-07-31 10:32  liulex  阅读(141)  评论(0编辑  收藏  举报