Submission #1284656

#TimeUsernameProblemLanguageResultExecution timeMemory
1284656dobri_okeRabbit Carrot (LMIO19_triusis)C++20
100 / 100
44 ms6108 KiB
#include <bits/stdc++.h>
using namespace std;
#define F first
#define S second
#define pb push_back
#define int long long

const int N = 2e5+100;
int n, m, t[N * 4], a[N];
void build(int v, int l, int r){
    t[v] = 1e18;
    if(l == r) return;
    int m = (l + r) / 2;
    build(v + v, l, m);
    build(v + v + 1, m + 1, r);
}
void upd(int v, int l, int r, int i, int x){
    if(l == r){
        t[v] = min(t[v], x);
        return;
    }
    int m = (l + r) / 2;
    if(i <= m) upd(v + v, l, m, i, x);
    else upd(v + v + 1, m + 1, r, i, x);
    t[v] = min(t[v + v], t[v + v + 1]);
}
int get(int v, int l, int r, int x){
    if(l == r) return l;
    int m = (l + r) / 2;
    if(t[v + v + 1] <= x) return get(v + v + 1, m + 1, r, x);
    return get(v + v, l, m, x);
}
void solve(){
    cin >> n >> m;
    a[0] = 0;
    for(int i = 1; i <= n; i++){
        cin >> a[i];
        a[i] = i * m - a[i];
    }
    build(1, 0, n);
    upd(1, 0, n, 0, -1e18);
    for(int i = 1; i <= n; i++){
        if(a[i] < 0) continue;
        int f = get(1, 0, n, a[i]);
        upd(1, 0, n, f + 1, a[i]);
    }
    cout << n - get(1, 0, n, 1e17);
}

signed main(){   
    ios_base::sync_with_stdio(0);   cin.tie(0);
    //freopen("promote.in","r",stdin);
    //freopen("promote.out","w",stdout);
    int tt=1;
   // cin >> tt;
    while(tt--){
        solve();
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...