Submission #1322449

#TimeUsernameProblemLanguageResultExecution timeMemory
1322449rayxuRabbit Carrot (LMIO19_triusis)C++20
100 / 100
72 ms9820 KiB
#include <bits/stdc++.h>
#define int long long
using namespace std;
class SegTree {
  private:
    int sz;
    vector<int> tree;
  public:
    SegTree(int len): sz(len),tree(4*len,0){}
    void update(int ind,int val) {
        ind+=sz;
        tree[ind] = max(tree[ind],val);
        while (ind>1) {
            ind>>=1;
            tree[ind] = max(tree[ind*2],tree[ind*2+1]);
        }
    }
    int query(int l,int r) {
        int res=0;
        l+=sz; r+=sz;
        while (l<=r) {
            if (l&1) res = max(res,tree[l++]);
            if (!(r&1)) res = max(res,tree[r--]);
            l>>=1; r>>=1;
        }
        return res;
    }
} ;
signed main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    //freopen("rabbit.in","r",stdin);
    int n,m; cin>>n>>m;
    vector<int> a(n+1,0);
    vector<int> all(n+1,0);
    for (int i=1;i<=n;i++) {
        int x; cin>>x;
        a[i] = x-i*m;
        all[i] = a[i];
    }
    sort(begin(all),end(all));
    reverse(begin(a),end(a));
    for (auto &i:a) i = lower_bound(begin(all),end(all),i)-begin(all)+1;
    int mx=1;
    for (auto i:a) mx = max(mx,i+1);
    SegTree segtree(mx);
    for (auto i:a) {
        int ml=segtree.query(0,i)+1;
        segtree.update(i,ml);
    }
    cout<<n+1-segtree.query(a[n],a[n]);
    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...