Submission #1268036

#TimeUsernameProblemLanguageResultExecution timeMemory
1268036rafamiuneGlobal Warming (CEOI18_glo)C++20
15 / 100
2095 ms12976 KiB
#include <bits/stdc++.h> using namespace std; #define fr first #define sc second #define int long long #define all(x) (x).begin(), (x).end() const int maxn = 2e5 + 5; const long long inf = 1e18 + 5; int n, x; vector<int> tr(4*maxn), v(maxn); void update(int node, int l, int r, int pos, int s) { if(l == r) { tr[node] = s; return; } int mid = (l+r)/2, lc = 2*node + 1, rc = 2*node + 2; if(pos <= mid) update(lc, l, mid, pos, s); else if(pos > mid) update(rc, mid + 1, r, pos, s); tr[node] = max(tr[lc], tr[rc]); } int query(int node, int l, int r, int ll, int rr) { if(l > rr || r < ll) { return -1; } if(l >= ll && r <= rr) { return tr[node]; } int mid = (l+r)/2, lc = 2*node + 1, rc = 2*node + 2; return max(query(lc, l, mid, ll, rr), query(rc, mid + 1, r, ll, rr)); } int solve(vector<int> v) { for(int i = 0; i <= 4*n; i++) { tr[i] = 0; } vector<int> aux; aux = v; sort(all(aux)); aux.erase(unique(all(aux)), aux.end()); for(int i = 1; i <= n; i++) { v[i] = lower_bound(all(aux), v[i]) - aux.begin() + 1; } for(int i = 1; i <= n; i++) { int max_dp = query(0, 1, n, 1, v[i] - 1); update(0, 1, n, v[i], max_dp + 1); } return query(0, 1, n, 1, n); } int32_t main() { ios::sync_with_stdio(false); cin.tie(NULL); cin >> n >> x; vector<int> t(n+1); for(int i = 1; i <= n; i++) { cin >> t[i]; } int ans = 0; for(int l = 1; l <= n; l++) { for(int r = l; r <= n; r++) { for(int s = -x; s <= x; s++) { v = t; for(int i = l; i <= r; i++) { v[i] += s; } ans = max(ans, solve(v)); } } } cout << ans << "\n"; 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...