제출 #1186940

#제출 시각아이디문제언어결과실행 시간메모리
1186940DangKhoizzzzGlobal Warming (CEOI18_glo)C++17
100 / 100
214 ms9388 KiB
#include <bits/stdc++.h> using namespace std; const int maxn = 1e6; struct Segment_Tree { int st[(maxn + 7)*4]; void update(int id , int l , int r , int pos , int val) { if(r < pos || l > pos) return; if(l == r) { st[id] = max(st[id] , val); return; } int mid = (l+r) >> 1; update(id*2 , l , mid , pos , val); update(id*2+1, mid+1 , r , pos , val); st[id] = max(st[id*2] , st[id*2+1]); } int get(int id , int l , int r, int u , int v) { if(r < u || l > v) return -1; if(u <= l && r <= v) return st[id]; int mid = (l+r) >> 1; return max(get(id*2 , l , mid , u , v) , get(id*2+1 , mid+1 , r , u , v)); } } ST; int n , x , a[maxn] , lis[maxn]; vector <int> val; void compress() { for(int i = 1; i <= n; i++) { val.push_back(a[i] + 1); val.push_back(a[i] + 1 - x); val.push_back(a[i]); } sort(val.begin() , val.end()); val.erase(unique(val.begin() , val.end()) , val.end()); } int encode(int x) { return (int)(upper_bound(val.begin() , val.end() , x) - val.begin()); } void build() { vector <int> LIS; for(int i = 1; i <= n; i++) { int pos = lower_bound(LIS.begin() , LIS.end() , a[i]) - LIS.begin(); if(pos == LIS.size()) { LIS.push_back(a[i]); lis[i] = LIS.size(); } else { LIS[pos] = a[i]; lis[i] = pos + 1; } } } void solve() { cin >> n >> x; for(int i = 1; i <= n; i++) cin >> a[i]; compress(); build(); int ans = 1; for(int i = n; i >= 1; i--) { int res = lis[i] + ST.get(1 , 1 , maxn , encode(a[i]+1-x) , maxn); ans = max(ans , res); int upd = ST.get(1 , 1 , maxn , encode(a[i] + 1) , maxn); ST.update(1, 1 , maxn , encode(a[i]) , upd + 1); } cout << ans << '\n'; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); solve(); 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...