心血来潮水一篇题解luogu竟然关了这题的提交…苦鲁西
本茍蒻的思路是遍历每个数组元素,分别找出她左右(包括她自己)的最长严格降序的长度,相加减一(因为“她”加了两次), 答案就是其最大值
Code
#include <bits/stdc++.h>
using namespace std;
#define rep(i, l, r) for (int i = (int)l; i <= (int)r; i++)
#define dep(i, r, l) for (int i = (int)r; i >= (int)l; i--)
int a[105], l[105], r[105];
int n,ma;
int main()
{
cin >> n;
rep(i, 1, n)cin >>a[i];
rep(i, 1, n)
{
memset(l, 0, sizeof l),memset(r, 0, sizeof r);
int llen = 0, rlen = 0;
l[++llen] = a[i], r[++rlen] = a[i];
dep(j,i-1,1)
{
if (a[j] < l[llen])
l[++llen] = a[j];
else
{
if (a[j] >= l[1])
continue;
int id = lower_bound(l + 1, l + 1 + n, a[j], greater<int>()) - l;
l[id] = a[j];
}
}
rep(j, i + 1, n)
{
if (a[j] < r[rlen])
r[++rlen] = a[j];
else
{
if (r[1] <= a[j])
continue;
int id = lower_bound(r + 1, r + 1 + rlen, a[j], greater<int>()) - r;
r[id] = a[j];
}
}
ma = max(ma, llen + rlen - 1);
}
cout << n - ma;
return 0;
}
QwQ