Submission #613876

#TimeUsernameProblemLanguageResultExecution timeMemory
613876Vladth11Global Warming (CEOI18_glo)C++14
100 / 100
324 ms23924 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 = 400001; const ll VMAX = 10; 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]; int aib[NMAX]; 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(int node, int x){ assert(node != 0); for(; node < NMAX; node += node&(-node)) aib[node] = max(aib[node], x); } unordered_map <int, int> mp; int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int i; cin >> n >> x; vector <int> nrm; for(i = 1; i <= n; i++){ cin >> v[i]; nrm.push_back(v[i]); if(v[i] + x - 1 > 0){ nrm.push_back(v[i] + x - 1); } 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); } sort(nrm.begin(), nrm.end()); int cnt = 0; for(int i = 0; i < nrm.size(); i++){ if(i == 0 || nrm[i] != nrm[i - 1]) cnt++; mp[nrm[i]] = cnt; } 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(mp[v[i] + x - 1])); update(mp[v[i]], acum[i]); } cout << maxim; return 0; }

Compilation message (stderr)

glo.cpp: In function 'int main()':
glo.cpp:68:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   68 |     for(int i = 0; i < nrm.size(); i++){
      |                    ~~^~~~~~~~~~~~
#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...