社区讨论

WA on #5 92pts 求hack

P8188[USACO22FEB] Email Filing S参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@micmfw6u
此快照首次捕获于
2025/11/24 12:02
3 个月前
此快照最后确认于
2025/11/24 14:29
3 个月前
查看原帖
code:
CPP
//May all the beauty be blessed.
#include<bits/stdc++.h>
#define int long long
#define pii pair<int,int>
#define fi first
#define se second
#define mrx 0x7f7f7f7f7f7f7f7f
//#define mrx 0x7f7f7f7f
using namespace std;
int t;
int n,m,k,a[100010],c[100010];
int v[100010];

vector<int> b;
priority_queue<int,vector<int>,greater<int> > p;
priority_queue<pii,vector<pii>,greater<pii> > pp;
queue<int> q;
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin>>t;
	while(t--){
		cin>>m>>n>>k;
		for(int i=1;i<=n;i++) cin>>a[i],c[a[i]]++;
		
		int l=1,r=k;
		for(int i=1;i<=n;i++){ //贪心选 
			while(!c[l]&&r<m) l++,r++;  
			if(l<=a[i]&&a[i]<=r) c[a[i]]--;
			else{ //贪心途中顺带清的 
				q.push(i);
				while(q.size()&&v[q.front()]) q.pop();
				pp.push({a[i],i});
				if(q.size()==k){
					b.push_back(a[q.front()]);
					v[q.front()]=1;
					q.pop();
				}
				
				while(pp.size()){
					if(v[pp.top().se]==1) pp.pop();
					else if(l<=pp.top().fi&&pp.top().fi<=r) v[pp.top().se]=2,c[pp.top().fi]--,pp.pop();
					else break;
				}
			}
		}
		while(q.size()){
			int x=q.front();
			q.pop();
			if(v[x]) continue;
			else b.push_back(a[x]);
		}
		while(pp.size()) pp.pop();
		
		
		for(int i=b.size()-1;i>=0;i--){ //划到底下后选的 
			if(l<=b[i]&&b[i]<=r) continue;
			p.push(b[i]);
			
			while(p.size()>=k&&r<m){
				l++,r++;
				while(p.size()&&l<=p.top()&&p.top()<=r) p.pop();
			}
		}
		
		while(p.size()&&r<m){
			l++,r++;
			while(p.size()&&l<=p.top()&&p.top()<=r) p.pop();
		}
		
		if(p.size()) cout<<"NO"<<'\n';
		else cout<<"YES"<<'\n';
		
		while(p.size()) p.pop();
		for(int i=1;i<=m;i++) c[i]=0;
		b.clear();
		for(int i=1;i<=n;i++) v[i]=0;
	}
}
/*

*/

回复

0 条回复,欢迎继续交流。

正在加载回复...