제출 #635579

#제출 시각아이디문제언어결과실행 시간메모리
635579ColourAttilaGlobal Warming (CEOI18_glo)C++17
100 / 100
105 ms7976 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; const ll INF = 3e10; int main() { ll n,x; cin >>n >> x; vector<ll> v(n); for(ll&i : v) cin >> i; vector<ll> suf(n+1, 0), lds(n+1, -1); lds[0] = INF; for(ll i = n-1; i >= 0; i--) { ll l = 0, r = n, mo = n; while(l <= r) { ll mid = (l + r) / 2; if(lds[mid] > v[i]) { l = mid+1; mo = mid; } else r = mid-1; } //cout << i << ": " << mo << endl; mo++; suf[i] = mo; lds[mo] = v[i]; } /*for(ll i = 0; i < n; i++) cout << suf[i] << ' '; cout << endl;*/ vector<ll> dp(n+1, INF); dp[0] = -1; ll mo = 0; for(ll i = 0; i < n; i++) { ll a = lower_bound(dp.begin(), dp.end(), v[i] + x) - dp.begin(); /*cout << i << ": "; for(ll i = 0; i <= n; i++) cout << dp[i] << ' '; cout << endl << a << ", " << suf[i] << endl;*/ mo = max(mo, a-1 + suf[i]); ll j = lower_bound(dp.begin(), dp.end(), v[i]) - dp.begin(); dp[j] = v[i]; } cout << mo << endl; 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...