Submission #1149831

#TimeUsernameProblemLanguageResultExecution timeMemory
1149831zhasynGlobal Warming (CEOI18_glo)C++20
100 / 100
148 ms19440 KiB
#include <bits/stdc++.h> #define pb push_back #define pf push_front using namespace std; #define F first #define S second typedef long long ll; #define pii pair <int, int> #define pll pair <ll, ll> typedef long double ld; const ll N = 2 * 1e5 + 100, M = 4096 + 10, len = 21, inf = 1e18; const ll mod = 1e9 + 7; ll um(ll a, ll b){ return (1LL * a * b % mod + mod) % mod; } ll n, dp[N], a[N], rev[N]; int main(){ ios::sync_with_stdio(false); cin.tie(NULL); ll x, ans = 1; cin >> n >> x; for(ll i = 1; i <= n; i++){ dp[i] = LLONG_MAX; rev[i] = LLONG_MAX; } dp[0] = rev[0] = LLONG_MIN; for(ll i = 1; i <= n; i++){ cin >> a[i]; } set <pll> st; vector <pll> vec; st.insert({LLONG_MAX, 0}); st.insert({LLONG_MIN, 0}); for(ll i = n; i >= 1; i--){ ll k = lower_bound(rev, rev + n, -a[i]) - rev; if(-a[i] > rev[k - 1]){ st.erase({rev[k], k}); vec.pb({rev[k], k}); rev[k] = -a[i]; st.insert({rev[k], k}); vec.pb({rev[k], k}); //cout << k << " "<< rev[k] << endl; } } for(ll i = 1; i <= n; i++){ ll k = lower_bound(dp, dp + n, a[i]) - dp; pll cur = vec.back(); vec.pop_back(); st.erase(cur); cur = vec.back(); vec.pop_back(); st.insert(cur); if(a[i] > dp[k - 1]){ dp[k] = a[i]; auto hr = st.upper_bound({-(a[i] - x), 0}); hr--; pll pp = *hr; ans = max(ans, k + pp.S); } } cout << ans; 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...