제출 #840732

#제출 시각아이디문제언어결과실행 시간메모리
840732c2zi6Global Warming (CEOI18_glo)C++14
100 / 100
100 ms5800 KiB
#include <bits/stdc++.h>
#define ff first
#define ss second

using namespace std;
using ll = long long;

int stx;

vector<int> LIS1(vector<int> a) {
    int n = a.size();
    vector<int> dp(n + 1, 2e9);
    dp[0] = -2e9;
    vector<int> ans;
    for (int x : a) {
        auto it = lower_bound(dp.begin(), dp.end(), x);
        ans.push_back(it - dp.begin());
        *it = x;
    }
    return ans;
}

vector<int> LIS2(vector<int> a) {
    int n = a.size();
    reverse(a.begin(), a.end());
    vector<int> dp(n+1, -2e9);
    dp[0] = +2e9;
    vector<int> ans;
    for (int x : a) {
        auto it = prev(upper_bound(dp.rbegin(), dp.rend(), x));
        ans.push_back(dp.rend() - prev(upper_bound(dp.rbegin(), dp.rend(), x - stx)) - 1);
        *it = x;
    }
    reverse(ans.begin(), ans.end());
    return ans;
}

void solve() {
    int n;
    cin >> n >> stx;
    vector<int> a(n);
    for (int& x : a) cin >> x;
    
    vector<int> lr = LIS1(a);
    vector<int> rl = LIS2(a);
    
    int ans = 0;
    for (int i = 0; i < n; i++) ans = max(ans, lr[i] + rl[i] - 1);
    cout << ans << endl;
}

int main() {
	int t = 1;
    //cin >> t;
    while (t--) solve();
}
#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...