Submission #667182

#TimeUsernameProblemLanguageResultExecution timeMemory
667182KahouGlobal Warming (CEOI18_glo)C++14
100 / 100
112 ms6616 KiB
#include<bits/stdc++.h> using namespace std; #define F first #define S second #define endl '\n' typedef long long ll; typedef pair<int, int> pii; typedef pair<ll,ll> pll; const int N = 2e5 + 50; int n, m, s[N], f[N]; int x, t[N]; vector<int> dp; int a[N]; int fen[N]; int get(int i) { int out = fen[0]; for (; i > 0; i -= i&(-i)) { out = max(out, fen[i]); } return out; } void upd(int i, int x) { if (!i) fen[i] = max(fen[i], x); else for (; i <= n; i += i&(-i)) { fen[i] = max(fen[i], x); } } void solve() { cin >> n >> x; for (int i = 1; i <= n; i++) { cin >> t[i]; a[i] = t[i]; } sort(a+1, a+n+1); m = unique(a+1, a+n+1)-a-1; for (int i = 1; i <= n; i++) { int lb = lower_bound(dp.begin(), dp.end(), t[i])-dp.begin(); if (lb >= (int)dp.size()) dp.push_back(t[i]); dp[lb] = t[i]; f[i] = lb+1; } for (int i = 1; i <= n; i++) { t[i] = -t[i]; } dp.clear(); for (int i = n; i >= 1; i--) { int lb = lower_bound(dp.begin(), dp.end(), t[i])-dp.begin(); if (lb >= (int)dp.size()) dp.push_back(t[i]); dp[lb] = t[i]; s[i] = lb+1; } for (int i = 1; i <= n; i++) { t[i] = -t[i]; } int ans = 0; for (int i = 1; i <= n; i++) { int id = lower_bound(a+1, a+m+1, t[i]+x)-a-1; ans = max(ans, s[i] + get(id)); int id2 = lower_bound(a+1, a+m+1, t[i])-a; upd(id2, f[i]); } cout << ans << endl; } int main() { ios::sync_with_stdio(0), cin.tie(0); 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...