Submission #1253408

#TimeUsernameProblemLanguageResultExecution timeMemory
1253408goldenbullRabbit Carrot (LMIO19_triusis)C++17
100 / 100
78 ms12108 KiB
#include <bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define all(x) (x).begin(), (x).end()
using namespace std;
using ll = long long;
using vi = vector<int>;

const char el = '\n';
const int maxn = 2e5+7;
const int inf = 1e9+7;

struct Bitcoin {
    vi arr;
    int n;
    Bitcoin (int sz) : n(sz) {
        arr.assign(sz+1, 0);
    }
    void upd(int i, int v) {
        for (; i <= n; i+= i& -i) arr[i] = max(arr[i], v);
    }
    int get(int i) {
        int res = 0;
        for (; i > 0; i-= i& -i) res = max(res, arr[i]);
        return res;
    }
};

int n, m, cnt=1;
int a[maxn];
vi b;
map<int, int> compress;

int main() {
    ios_base::sync_with_stdio(false); cin.tie(nullptr);
//    freopen("test.inp", "r", stdin);
//    freopen(".inp", "r", stdin);
//    freopen(".out", "w", stdout);

    cin >> n >> m;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
        if (m*i - a[i] >= 0) b.pb(m*i - a[i]);
    }

    for (auto i : b) compress[i] = 0;
    for (auto& i : compress) i.se = cnt++;
    for (auto& i : b) i = compress[i];

    Bitcoin dp(cnt);
    for (auto i : b) {
        dp.upd(i, dp.get(i) + 1);
    }
    cout << n - dp.get(cnt);

    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...