제출 #703217

#제출 시각아이디문제언어결과실행 시간메모리
703217LonlyRRabbit Carrot (LMIO19_triusis)C++17
100 / 100
29 ms5376 KiB
#include<bits/stdc++.h>
#define int long long

/**
    the least number of changes = the most number of heights that do not change
    LIS:   i1, i2, i3, ...., ik
        a[ij]<= ij*M
        a[ij+1] <= a[ij] + (ij+1-ij)*M
    <=> M*ij - a[ij] >=0
        M*ij - a[ij] <= M*(ij+1) - a[ij+1]
    <=> make b[i] = M*i - a[i]
    then ans = n - length of the longest non-decreasing subsequence of b
**/

using namespace std;
const int maxn=2e5+5,inf=1e18;
int n,m,ans;
int b[maxn],dp[maxn];

signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    cin>>n>>m;
    for (int i=1,x;i<=n;i++) cin>>x,b[i]=m*i-x,dp[i]=inf;
    for (int i=1;i<=n;i++)
    {
        if (b[i]<0) continue;
        int pos=upper_bound(dp+1,dp+n+1,b[i])-dp;
        ans=max(ans,pos);
        dp[pos]=b[i];
    }
    cout<<n-ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...