社区讨论

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 条回复,欢迎继续交流。

正在加载回复...