小y的序列:

题目告诉我们这是一个a[i]与a[i+1]相差i的序列,所以我们只需要枚举一个已经是这个比例来的数列,然后再用题目给的数据看看和这个数列的差是一样的数量有多少,取最多的那个就是答案。由于数据范围a[i]是1e9,这里我用的map时间复杂度O(nlog(n)),也许数据可以用数组过直接O(n)。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
inline ll read(){
    ll s=0,f=1;char c=getchar();
    while(c<'0'||c>'9'){
        if(c=='-')f=-1;c=getchar();
    }
    while(c>='0'&&c<='9'){
        s=(s<<1)+(s<<3)+(c^48);c=getchar();
    }
    return f*s;
}
const int N=1555555;
ll a[N];
int ans;
map<ll,int>q;
int main(){
    int n=read();
    for(int i=1;i<=n;i++){
        a[i]=a[i-1]+i-1;
    }
    for(int i=1;i<=n;i++){
        ll x=read();
        ans=max(ans,++q[x-a[i]]);
    }
    cout<<n-ans<<endl;
    return 0;
}