问题描述
现有整数 𝐴1,𝐴2,...𝐴𝑛A1,A2,...An,修改最少的数字为实数(整数或者小数),使得数列严格单调递增。
输入
第一行,一个整数 𝑛n 。(𝑛≤105n≤105)
第二行,𝑛n 个整数 𝐴𝑖Ai 。(𝐴𝑖≤109Ai≤109)
输出
11 个整数,表示最少修改的数字的数量。
样例
输入
3 1 3 2
输出
1
详细解法看我前个文章,就是在1893. 最长上升子序列LIS(2),的基础上用n减伤cnt就是了
代码:
#include<bits/stdc++.h>
using namespace std;
long long n,a[100005],cnt,b[100005];
int main()
{
cin>>n;
for(int i=0;i<n;i++) scanf("%lld",&a[i]);
b[++cnt]=a[0];
for(int i=1;i<n;i++)
{
long long y=lower_bound(b+1,b+1+cnt,a[i])-b;
if(y>cnt) b[++cnt]=a[i];
else b[y]=a[i];
}
cout<<n-cnt;
return 0;
}//完美
仅作学术作用,尽量不抄答案