求助42
查看原帖
求助42
533372
Benny_Li楼主2023/10/29 16:35

Wa on 3,4,6,7

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N=114514*10;
int n,k,arr[N],p[N],cnt,f[N],x;
bool flag[N];
int main(){
    scanf("%d%d",&n,&k);
    for(int i=0;i<k;++i){
        scanf("%d",&p[i]);
        --p[i];//下标从0开始
    }
    sort(p,p+k);
    for(int i=0;i<n;++i){
        scanf("%d",&arr[i]);
    }
    for(int i=1;i<k;++i){
        if(arr[p[i]]<=arr[p[i-1]]){//p数组不是单调上升的
            printf("impossible");
            return 0;
        }
    }
    p[k]=n;//最后一个必选
    arr[n]=1e9;
    for(int i=0;i<n;++i){
        if(p[cnt]==i){
            ++cnt;
            continue;
        }
        if(arr[i]<=arr[p[cnt]]||arr[i]>=arr[p[cnt+1]])flag[i]=true;//不遵循p数组的结果要删去
    }
    cnt=0;
    for(int i=0;i<=n;++i){
        if(flag[i])continue;
        if(arr[i]>f[cnt]){
            f[++cnt]=arr[i];
        }else{
            x=lower_bound(f,f+cnt+1,arr[i])-f;
            f[x]=arr[i];
        }
    }
    printf("%d",cnt);
    return 0;
}
2023/10/29 16:35
加载中...