제출 #639790

#제출 시각아이디문제언어결과실행 시간메모리
639790TrentGlobal Warming (CEOI18_glo)C++17
100 / 100
919 ms26964 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 const int MV = 2e9 + 10, MN = 4e5 + 10; struct BIT{ vector<int> comp; int bit[MN]; void init(set<int>& vals){ comp.clear(); for(int& i : bit) i = 0; for(int i : vals) comp.push_back(i); } void upd(int i, int v){ // get array index of i i = lower_bound(all(comp), i) - comp.begin(); ++i; for(; i < MN; i+=i&-i) bit[i] = max(bit[i], v); } int qu(int i){ i = lower_bound(all(comp), i) - comp.begin(); ++i; int ma = 0; for(; i > 0; i-=i&-i) ma = max(ma, bit[i]); return ma; } }; BIT bit; int arr[MN], I[MN], D[MN]; signed main(){ int n, x; cin >> n >> x; forR(i, n) cin >> arr[i]; set<int> vals; vals.clear(); forR(i, n) vals.insert(arr[i]), vals.insert(arr[i] - 1); bit.init(vals); forR(i, n) { bit.upd(arr[i], I[i] = bit.qu(arr[i] - 1) + 1); } vals.clear(); forR(i, n) vals.insert(MV - arr[i]), vals.insert(MV - arr[i] - 1); bit.init(vals); for(int i = n - 1; i >= 0; --i){ bit.upd(MV - arr[i], D[i] = bit.qu(MV - arr[i] - 1) + 1); } vals.clear(); forR(i, n) vals.insert(arr[i]), vals.insert(arr[i] + x - 1); bit.init(vals); int ma = 0; forR(i, n){ ma = max(ma, bit.qu(arr[i] + x - 1) + D[i]); bit.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...