제출 #754353

#제출 시각아이디문제언어결과실행 시간메모리
754353gortomiGlobal Warming (CEOI18_glo)C++17
100 / 100
62 ms5380 KiB
#include <iostream>
#include <vector>
#include <algorithm>
#include <climits>
using namespace std;
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    int n, x;
    cin >> n >> x;
    vector<int> a(n + 1);
    for(int i = 1; i <= n; i++)
    {
        cin >> a[i];
    }
    vector<int> dp(n + 2, INT_MAX);
    dp[0] = 0;
    vector<pair<int, int> > ch(n + 1);
    for(int i = 1; i <= n; i++)
    {
        int j = upper_bound(dp.begin(), dp.end(), a[i]) - dp.begin();
        if(dp[j - 1] == a[i]) continue;
        dp[j] = a[i];
        ch[i] = {dp[j], j};
    }
    fill(dp.begin(), dp.end(), INT_MAX);
    dp[0] = -INT_MAX;
    int ans = 0;
    for(int i = n; i >= 1; i--)
    {
        if(ch[i].second != 0)
        {
            int ind = lower_bound(dp.begin(), dp.end(), -ch[i].first + x) - dp.begin()  - 1;
            ans = max(ans, ch[i].second + ind);
        }
        auto it = upper_bound(dp.begin(), dp.end(), -a[i]);
        int j = it - dp.begin();
        if(dp[j - 1] == -a[i]) continue;
        dp[j] = -a[i];
    }
    cout << ans;
    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...