蹲个大佬求解答,为啥我这连续六个数字的全排列写错了,求救
查看原帖
蹲个大佬求解答,为啥我这连续六个数字的全排列写错了,求救
1215295
discretely楼主2024/8/1 01:09

蹲个大佬帮忙康康cc函数

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int l,r;
const int N=1e5+10;
vector<int> a(N+1);
const int MAX_N = 1e5 + 5;
int n,q,p[MAX_N];
bool cc(int l,int r){
    vector<int> k;
    for(int i=l;i<=r;++i) k.push_back(a[i]);
    sort(k.begin(),k.end());
    do{
        if(k[0]>k[1]||k[1]>k[2]||k[3]>k[4]||k[4]>k[5]||k[0]>k[2]||k[3]>k[5]) continue;
        if(k[0]+k[1]>k[2]&&k[3]+k[4]>k[5]){ 
            return 1;
        }
    }while(next_permutation(k.begin(),k.end()));
    return 0;
}

bool check(int l,int r){
    vector<int> now;
    int len=r-l+1;
    now.push_back(1);
    for(int i=l;i<=r;++i) now.push_back(a[i]);
    sort(now.begin()+1,now.end());
    for(int i=1;i<=len-2;++i){
        if(now[i]+now[i+1]>now[i+2]){
            for(int j=i+3;j<=len-2;++j){
                if(now[j]+now[j+1]>now[j+2]){
                    return 1;
                }
            }
        }
    }
    for (int i = l; i <= r - 5; i++){
        if(cc(i,i+5)) return 1;
    }
    return 0;
    
}

int main(){
    cin>>n>>q;
    for(int i=1;i<=n;++i) cin>>a[i];
    while(q--){
        cin>>l>>r;
        if(r-l+1>=48) cout<<"YES"<<endl;
        else{
            if(check(l,r)) cout<<"YES"<<endl;
            else cout<<"NO"<<endl;
        }
    }

    return 0;
}
2024/8/1 01:09
加载中...