0828-T1 移除數

maniubi發表於2024-08-29

0828-T1 移除數

題意

給出一個序列 \(a\),求在 \(a\) 中刪除一種數後得到的序列中,字典序最小的序列。

思路

貪心。

選擇第一個 \(i\) 滿足 \(a_i>a_{i+1}\),刪除 \(a_i\) 後,得到的序列字典序最小。

\(a_i \le a_{i+1}\),刪除 \(a_i\) 後字典序不會變小。

\(a_i > a_{i+1}\)\(i\) 不是第一個,刪除 \(a_i\) 後得到的序列字典序一定沒有刪除第一個小。

若序列遞增刪除最後一項即可。

程式碼

#include <bits/stdc++.h>
using namespace std;
const int N = 200005;
int n, a[N], num;
int main() {
	cin >> n;
	for (int i = 1; i <= n; i ++) cin >> a[i];
	for (int i = 1; i <= n; i ++) 
		if (a[i] > a[i + 1]) {
			num = a[i];
			break;	
		}
	for (int i = 1; i <= n; i ++) {
		if (a[i] == num) continue;
		cout << a[i] << " ";
	} 
	return 0;
}

相關文章