给出一个AC了的N方做法,希望加强数据
查看原帖
给出一个AC了的N方做法,希望加强数据
692647
tanghg楼主2023/8/22 12:38
#include<iostream>
#include<algorithm>
#include<map>
#include<set>
#include<cstring>
#include<vector>
using namespace std;
typedef long long ll;
const ll MAXN=1e5+5;
ll n,q,a[MAXN];
bool vis[MAXN];
vector<ll>pos[MAXN],need;
int main(){
    scanf("%lld%lld",&n,&q);
    ll ma=0;
    for(int i=1;i<=n;++i){
        scanf("%lld",&a[i]);
        ma=max(ma,a[i]);
        pos[a[i]].push_back(i);
        if(pos[a[i]].size()==2){
            need.push_back(a[i]);
        }
    }
    while(q--){
        memset(vis,false,sizeof(vis));
        ll l,r;
        scanf("%lld%lld",&l,&r);
        bool good=true;
        for(auto i:need){
            ll sz=0;
            for(auto j:pos[i]){
                if(l<=j&&j<=r){
                    sz++;
                    if(sz==2){
                        good=false;
                        break;
                    }
                }
            }
            if(!good){
                break;
            }
        }
        if(good){
            printf("Yes\n");
        }else{
            printf("No\n");
        }
    }
    return 0;
}

将每一个元素在数列里出现了大于 22 的元素保存,同时对于这些元素保存他们所有出现位置。之后直接去判断合法。如果合法就输出 Yes 否则输出 No

2023/8/22 12:38
加载中...