Submission #663334

#TimeUsernameProblemLanguageResultExecution timeMemory
663334finn__Global Warming (CEOI18_glo)C++17
100 / 100
49 ms6488 KiB
#include <bits/stdc++.h>
using namespace std;

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

    size_t n;
    int64_t x;
    cin >> n >> x;

    vector<int64_t> t(n);
    for (int64_t &y : t)
        cin >> y;

    reverse(t.begin(), t.end());
    vector<int64_t> dp;
    vector<size_t> lis_after(n);

    for (size_t i = 0; i < n; i++)
    {
        auto it = lower_bound(dp.begin(), dp.end(), t[i], greater<int64_t>());
        lis_after[n - 1 - i] = it - dp.begin() + 1;
        if (it == dp.end())
            dp.push_back(t[i]);
        else
            *it = t[i];
    }

    reverse(t.begin(), t.end());
    dp.clear();
    size_t max_lis = 0;

    for (size_t i = 0; i < n; i++)
    {
        auto it = lower_bound(dp.begin(), dp.end(), t[i] + x);
        max_lis = max(max_lis, it - dp.begin() + lis_after[i]);

        it = lower_bound(dp.begin(), dp.end(), t[i]);

        if (it == dp.end())
            dp.push_back(t[i]);
        else
            *it = t[i];
    }

    cout << max_lis << '\n';
}
#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...