Submission #1278061

#TimeUsernameProblemLanguageResultExecution timeMemory
1278061tagizadeGlobal Warming (CEOI18_glo)C++17
0 / 100
36 ms5188 KiB
#include <bits/stdc++.h>
using namespace std;

vector<int> lis_left(const vector<long long>& a) {
    vector<long long> tails;
    vector<int> res(a.size());
    for (int i = 0; i < (int)a.size(); i++) {
        auto it = lower_bound(tails.begin(), tails.end(), a[i]);
        if (it == tails.end()) tails.push_back(a[i]);
        else *it = a[i];
        res[i] = (int)(it - tails.begin() + 1);
    }
    return res;
}

vector<int> lis_right(const vector<long long>& a) {
    int n = (int)a.size();
    vector<long long> tails;
    vector<int> res(n);
    for (int i = n - 1; i >= 0; i--) {
        auto it = lower_bound(tails.begin(), tails.end(), -a[i]);
        if (it == tails.end()) tails.push_back(-a[i]);
        else *it = -a[i];
        res[i] = (int)(it - tails.begin() + 1);
    }
    return res;
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n;
    long long x;
    cin >> n >> x;
    vector<long long> t(n);
    for (int i = 0; i < n; i++) cin >> t[i];

    vector<int> L = lis_left(t);
    vector<int> R = lis_right(t);

    int ans = *max_element(L.begin(), L.end());

    for (int i = 0; i + 1 < n; i++) {
        if (t[i] + x < t[i + 1]) {
            ans = max(ans, L[i] + R[i + 1]);
        }
    }

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