Submission #1213888

#TimeUsernameProblemLanguageResultExecution timeMemory
1213888dubabubaGlobal Warming (CEOI18_glo)C++20
100 / 100
79 ms2632 KiB
#include <bits/stdc++.h>
using namespace std;

const int INF = 1e9 + 10;
const int mxn = 1e6 + 10;
int n, x, a[mxn], dp[mxn];

int main() {
    cin >> n >> x;
    for(int i = 0; i < n; i++)
        cin >> a[i];

    vector<int> MS(n + 1, INF);
    for(int i = n - 1; i >= 0; i--) {
        int val = -a[i];
        int ind = lower_bound(MS.begin(), MS.end(), val) - MS.begin();
        dp[i] = ind + 1;
        // cout << i << " " << a[i] << ": " << dp[i] << endl;
        MS[ind] = val;
    }

    MS.clear();
    MS.resize(n + 1, INF);
    int ans = 0;
    for(int i = 0; i < n; i++) {
        int tmp = lower_bound(MS.begin(), MS.end(), a[i]) - MS.begin();
        ans = max(ans, tmp + dp[i]);

        // cout << i << ": " << tmp << " + " << dp[i] << endl;

        int val = a[i] - x;
        int ind = lower_bound(MS.begin(), MS.end(), val) - MS.begin();
        MS[ind] = val;
    }

    cout << ans << endl;
    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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...