제출 #639783

#제출 시각아이디문제언어결과실행 시간메모리
639783TrentGlobal Warming (CEOI18_glo)C++17
48 / 100
2095 ms157068 KiB
#include "bits/stdc++.h"
#include <unordered_map>

using namespace std;
#define ll long long
#define open(g) string _name_ = g; freopen((_name_ + ".in").c_str(), "r", stdin); freopen((_name_ + ".out").c_str(), "w", stdout)
#define printArr(a, len) for(int asdf = 0; asdf < (len); ++asdf) cout << (a)[asdf] << ' '; cout << '\n';
#define boost() cin.sync_with_stdio(0); cin.tie(0)
#define forR(i, x) for(int i = 0; i < x; ++i)
#define REP(i, a, b) for(int i = (a); i < (b); ++i)
#define all(i) i.begin(), i.end()
#define pii pair<int, int>
#define vi vector<int>
#define si set<int>
#define usi unordered_set<int>
#define mii map<int, int>
#define umii unordered_map<int, int>
#define gp_hash_table unordered_map
#define int ll

const int MV = 2e9 + 10, MN = 2e5 + 10;
map<int, int> bit;
void upd(int i, int v){
    ++i;
    for(; i < MV; i+=i&-i) {
        bit[i] = max(bit[i], v);
    }
}
int qu(int i){
    ++i;
    int ma = 0;
    for(; i > 0; i-=i&-i) {
        ma = max(ma, bit[i]);
    }
    return ma;
}

int arr[MN], I[MN], D[MN];
signed main(){
    int n, x; cin >> n >> x;
    bit.clear();
    forR(i, n) cin >> arr[i];
    forR(i, n) upd(arr[i], I[i] = qu(arr[i] - 1) + 1);
    bit.clear();
    for(int i = n - 1; i >= 0; --i){
        upd(MV - arr[i], D[i] = qu(MV - arr[i] - 1) + 1);
    }
    bit.clear();
    int ma = 0;
    forR(i, n){
        ma = max(ma, qu(arr[i] + x - 1) + D[i]);
        upd(arr[i], I[i]);
    }
    cout << ma << '\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...