제출 #850206

#제출 시각아이디문제언어결과실행 시간메모리
850206overwatch9Global Warming (CEOI18_glo)C++17
62 / 100
83 ms4688 KiB
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
    int n, x;
    cin >> n >> x;
    vector <int> nums(n);
    for (int i = 0; i < n; i++)
        cin >> nums[i];
    vector <int> lis(n), dp;
    vector <int> lis_val(n);
    for (int i = 0; i < n; i++) {
        auto x = lower_bound(dp.begin(), dp.end(), nums[i]);
        if (x == dp.end())
            dp.push_back(nums[i]);
        else
            *x = nums[i];
        lis_val[i] = dp.back();
        lis[i] = dp.size();
    }
    dp.clear();
    for (int i = 0; i < n; i++) {
        nums[i] = -(nums[i] + x);
        lis_val[i] = -(lis_val[i] + x);
    }
    int ans = 0;
    for (int i = n-1; i >= 0; i--) {
        auto y = lower_bound(dp.begin(), dp.end(), lis_val[i] + x);
        ans = max(ans, (int)(y - dp.begin()) + lis[i]);
        auto z = lower_bound(dp.begin(), dp.end(), nums[i]);
        if (z == dp.end())
            dp.push_back(nums[i]);
        else
            *z = nums[i];
    }
    cout << ans << '\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...