P8188求助
查看原帖
P8188求助
494598
him的自我修养楼主2023/10/16 11:12
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int t,n,m,k,cnt[N],a[N]; 
bool vis[N];
void init(){
	memset(cnt,0,sizeof(cnt));
	memset(vis,false,sizeof(vis));
}
void solve(){
	init();
	cin >>m>>n>>k;
	cout <<"YES\n";
	return ;
	deque<int> d;
	priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> q;
	for(int i=1;i<=n;i++){
		cin >>a[i];
		if(i<=k){
			q.push(make_pair(a[i],i));
		}
		cnt[a[i]]++;
	}
	int l=1,r=k,f=1;
	while(q.size() || d.size()){
		while(!cnt[f] && f<m-k+1) f++;
		if(q.size() && q.top().first>=f && q.top().first<=f+k-1){
			cnt[q.top().first]--;
			vis[q.top().second]=true;
			q.pop();
			if(r<n){
				r++;
				q.push(make_pair(a[r],r));
			}
		}else if(r<n){
			l++,r++;
			q.push(make_pair(a[r],r));
			d.push_back(a[l-1]);
		}else if((int)q.size()<k && d.size()){
			l--;
			q.push(make_pair(d.back(),l));
			d.pop_back();
		}else break;
		if(!q.empty() && q.top().second<l) q.pop();
		while(vis[l]) l++;
	}
	if(q.size()) cout <<"NO\n";
	else cout <<"YES\n";
}
int main(){
	cin >>t;
	while(t--){
		solve();
	}
	return 0;
}
2023/10/16 11:12
加载中...