社区讨论
WA11求调
AT_abc262_f [ABC262F] Erase and Rotate参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @lo343jod
- 此快照首次捕获于
- 2023/10/24 00:28 2 年前
- 此快照最后确认于
- 2023/10/24 00:28 2 年前
CPP
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxn = 4e5 + 10;
int n, k, a[maxn];
vector<int>ans1, ans2;
deque<int>q;
void solve1(){
int p = 1, d;
for(int i = 2; i <= k + 1; i++) if(a[i] < a[p]) p = i;
// 删去1~p-1
d = k - p + 1;
while(q.size()) q.pop_front();
ans1.push_back(a[p]);
for(int i = p + 1; i <= n; i++){
while(d && q.size() && q.back() > a[i]){
q.pop_back();
d--;
}
q.push_back(a[i]);
}
while(d--) q.pop_back();
while(q.size()){
ans1.push_back(q.front());
q.pop_front();
}
}
void solve2(){
int p = n, d;
for(int i = n - 1; i >= n - k; i--) if(a[p] > a[i]) p = i;
// 处理掉p+1~n
d = k - n + p - 1;
while(q.size()) q.pop_front();
ans2.push_back(a[p]);
for(int i = p + 1; i <= n; i++){
if(a[i] > a[1]) continue;
while(q.size() && q.back() > a[i]) q.pop_back();
q.push_back(a[i]);
}
while(q.size()){
ans2.push_back(q.front());
q.pop_front();
}
for(int i = 1; i < p; i++){
while(d && q.size() && q.back() > a[i]){
q.pop_back();
d--;
}
q.push_back(a[i]);
}
while(q.size() && d--) q.pop_back();
while(q.size()){
ans2.push_back(q.front());
q.pop_front();
}
while(d > 0) d--, ans2.pop_back();
}
bool cmp(vector<int>x, vector<int>y){
for(int i = 0; i < min(x.size(), y.size()); i++){
if(x[i] == y[i]) continue;
return x[i] < y[i];
}
return x.size() < y.size();
}
signed main(){
ios::sync_with_stdio(0);
cin >> n >> k;
for(int i = 1; i <= n; i++) cin >> a[i];
if(!k){
for(int i = 1; i <= n; i++) cout << a[i] << " ";
cout << endl;
return 0;
}
solve1(); solve2();
if(cmp(ans1, ans2)){
for(int i = 0; i < ans1.size(); i++) cout << ans1[i] << " ";
cout << endl;
}
else{
for(int i = 0; i < ans2.size(); i++) cout << ans2[i] << " ";
cout << endl;
}
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...