CF1635B 题解
liangbowen · · 题解
题目传送门!
更好的阅读体验?
这题显然可以使用贪心的思想解决。
由于头和尾一定不用更改,所以只需从
贪心原则下,我们更改的数应该要与相邻的数相等。
按照上面的原则,如果你更改了
所以,如果此时
代码如下,时间复杂度
完整代码
#include <iostream>
#include <cstdio>
using namespace std;
int a[200005];
void solve()
{
int n, cnt = 0;
scanf("%d", &n);
for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
for (int i = 2; i < n; i++) //头和尾肯定不用改。
if (a[i] > a[i-1] && a[i] > a[i+1])
cnt++, a[i+1] = max(a[i], a[i+2]);
printf("%d\n", cnt);
for (int i = 1; i <= n; i++) printf("%d ", a[i]);
printf("\n");
}
int main()
{
int T;
scanf("%d", &T);
while (T--) solve();
return 0;
}