제출 #349212

#제출 시각아이디문제언어결과실행 시간메모리
349212gozoniteRabbit Carrot (LMIO19_triusis)C++14
0 / 100
4 ms492 KiB
#include <bits/stdc++.h>
using namespace std;
 
typedef long long ll;
typedef vector<int> vi;
typedef vector<pair<int, int>> vii;
typedef pair<int, int> pi;
#define MOD 1000000007LL

ll N, M;
vector<ll> a;

int main() {
    //freopen("feast.in", "r", stdin);
    //freopen("feast.out", "w", stdout);
    //ios_base::sync_with_stdio(false);
    //cin.tie(0);
    
    cin >> N >> M;
    a.resize(N+1);
    a[0] = 0;
    for (int i = 1; i <= N; i++) cin >> a[i];
    
    vector<ll> lis{ 0 };
    vector<ll> slis{ 0 };
    for (ll i = 1; i <= N; i++) {
        if (a[i] <= (lis.back() + M*(i-slis.back())) + M) {
            lis.push_back(a[i]);
            slis.push_back(i+1);
        } else if (a[i] > i*M) {
            a[i] = a[i];
        } else {
            int lo = -1, hi = lis.size()-1;
            while (lo < hi) {
                int mid = (lo+hi+1)/2;
                ll val = (lis[mid] + M*(i-slis[mid])) + M;
                if (a[i] <= val) lo = mid;
                else hi = mid-1;
            }
            
            lis[lo+1] = a[i];
            slis[lo+1] = i+1;
        }
        
        //cout << "After round " << i << endl;
        //for (auto x : lis) cout << x << " "; cout << endl;
        //for (auto x : slis) cout << x << " "; cout << endl;
    }
    
    cout << N+1-lis.size() << endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...