Submission #613868

#TimeUsernameProblemLanguageResultExecution timeMemory
613868Vladth11Global Warming (CEOI18_glo)C++14
100 / 100
1487 ms111356 KiB
#include <bits/stdc++.h> #define debug(x) cerr << #x << " " << x << "\n" #define debugs(x) cerr << #x << " " << x << " " using namespace std; typedef long long ll; typedef pair <ll, ll> pii; typedef pair <long double, pii> muchie; const ll NMAX = 200001; const ll VMAX = 2000000001; const ll INF = (1LL << 60); const ll MOD = 998244353; const ll BLOCK = 447; const ll base = 117; const ll nr_of_bits = 21; int n, x; int v[NMAX]; unordered_map <int, int> aib; int lis[NMAX]; int acum[NMAX]; int maxim = 0; int lds[NMAX]; int query(int x){ int maxim = 0; for(; x > 0; x -= x&(-x)) maxim = max(maxim, aib[x]); return maxim; } void update(ll node, int x){ assert(node != 0); for(; node < VMAX; node += node&(-node)) aib[node] = max(aib[node], x); } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int i; cin >> n >> x; for(i = 1; i <= n; i++){ cin >> v[i]; int r = 0, pas = (1 << nr_of_bits); while(pas){ if(r + pas <= maxim && lis[r + pas] <= v[i]) r += pas; pas /= 2; } if(lis[r] != v[i]) r++; lis[r] = v[i]; acum[i] = r; maxim = max(maxim, r); } for(i = 0; i <= maxim; i++){ lis[i] = 0; } maxim = 0; for(i = n; i >= 1; i--){ int r = 0, pas = (1 << nr_of_bits); while(pas){ if(r + pas <= maxim && lis[r + pas] >= v[i]) r += pas; pas /= 2; } if(lis[r] != v[i]) r++; lis[r] = v[i]; maxim = max(maxim, r); lds[i] = r; } maxim = 0; for(i = 1; i <= n; i++){ maxim = max(maxim, lds[i] + query(v[i] + x - 1)); update(v[i], acum[i]); } cout << maxim; 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...