64分,不知道哪里错了
查看原帖
64分,不知道哪里错了
916899
cjkmath楼主2023/10/14 15:30
#include<bits/stdc++.h>
using namespace std;

long long fi[114514],mi[114514],ki[114514];
bool ff[114514];
int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL),cout.tie(NULL);

    int t;
    cin>>t;
    for(int i=1;i<=t;i++){
    	long long n,m,k,cnt=0,cnts=0;
    	cin>>n>>m>>k;
    	for(int j=1;j<=114513;j++){
    		mi[j]=0;
    		ki[j]=0;
    		fi[j]=0;
    		ff[j]=false;
		}
		cnts=m;
    	for(int j=1;j<=m;j++) cin>>fi[j],mi[fi[j]]++;
    	int tm=1,tn=1;
    	for(int j=1;j<=m;j++){
    		if(fi[j]>=tm&&fi[j]<=tm+k-1){
    			mi[fi[j]]--;
    			cnts--;
    			ff[j]=true;
			}
			if(tn+k<=m) tn++;
			if(mi[tm]==0) tm++;
		}
		for(int j=1;j<=m;j++){
			if(!ff[j]) ki[++cnt]=fi[j];
		}
		if(cnt==0){
			cout<<"YES"<<endl;
			continue;
		}
		tn=cnt-k+1;
		if(tn<1) tn=1;
		for(int j=cnt;j>=1;j--){
			if(ki[j]>=tm&&ki[j]<=tm+k-1){
				mi[ki[j]]--;
				cnts--;
				ff[j]=true;
				tn--;
				if(tn<1) tn=1;
				if(mi[tm]==0) tm++;
			}
			if(j==tn&&cnts!=0){
				cout<<"NO"<<endl;
				break;
			}
			else if(j==tn&&cnts==0){
				cout<<"YES"<<endl;
				break;
			}
		}
	}
    return 0;
}
2023/10/14 15:30
加载中...