一个非常好的结论题
发现题目要求要严格递增而且要求要正整数,所以直接做LIS不行
我们令原序列s变为s[i]-i
那么如果s[i]-i是一个负数,肯定不符合题意答案加一
去掉所有负数以后,就可以对s做一个LIS了,这里LIS可以是严格非降的就可以了
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define inf 0x7f7f7f7f
using namespace std;
int f[100010],s[100010],n,t;
int main(){
memset(f,127,sizeof f);
scanf("%d",&n);
for(int i=1;i<=n;++i) scanf("%d",s+i),s[i]-=i;
for(int i=1;i<=n;++i) if(s[i]>=0) *lower_bound(f,f+n,s[i]+1)=s[i];
printf("%d\n",n-(lower_bound(f,f+n,inf)-f));
}