社区讨论
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 条回复,欢迎继续交流。
正在加载回复...