Submission #491301

#TimeUsernameProblemLanguageResultExecution timeMemory
491301vicyan1611Rabbit Carrot (LMIO19_triusis)C++14
100 / 100
96 ms7732 KiB
#include <bits/stdc++.h>

using namespace std;
const long long Nmax = 2e5 + 5;

long long n, a[Nmax], m, b[Nmax], bit[Nmax];

void update(long long x, long long val)
{
    for (; x < Nmax; x += x & -x)
    {
        bit[x] = max(bit[x], val);
    }
}

long long gett(long long x)
{
    long long res = 0;
    for (; x > 0; x -= x  & -x)
    {
        res = max(res, bit[x]);
    }
    return res;
}

int main()
{
    cin >> n >> m;
    for (long long i = 1; i <= n; ++i)
    {
        cin >> a[i];
    }
    long long nb = 0;
    vector <long long> q;
    for (long long i = 1; i <= n; ++i)
    {
        if (a[i] > m * i) continue;
        b[++nb] = i * m - a[i];
        q.push_back(b[nb]);
    }
    sort(q.begin(), q.end());
    for (long long i = 1; i <= nb; ++i)
    {
        b[i] = lower_bound(q.begin(), q.end(), b[i]) - q.begin() + 1;
    }
    long long res = 0;
    for (long long i = 1; i <= nb; ++i)
    {
        long long t = gett(b[i]) + 1;
        update(b[i], t);
        res = max(res, t);
    }
    cout << n - res;
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...