Submission #825015

#TimeUsernameProblemLanguageResultExecution timeMemory
825015LittleCubeRadio Towers (IOI22_towers)C++17
17 / 100
651 ms5784 KiB
#include "towers.h" #include <bits/stdc++.h> #define ll long long #define pii pair<int, int> #define pll pair<ll, ll> #define F first #define S second using namespace std; namespace { int N; vector<int> H, p, l, r, vis; map<int, int> mp; } void init(int _N, vector<int> _H) { N = _N; H = _H; H.emplace_back(2e9); p = vector<int>(N + 1, 0); vector<int> l = p, r = p, vis = p; vector<int> mono = {N}; for (int i = 0; i <= N; i++) { while (H[mono.back()] < H[i]) r[mono.back()] = i, mono.pop_back(); l[i] = mono.back(); mono.push_back(i); } for (int i = 0; i < N; i++) if (H[l[i]] < H[r[i]]) p[i] = l[i]; else p[i] = r[i]; p[N] = N + 1; vector<int> v; for (int i = 0; i < N; i++) vis[p[i]] = 1; for (int i = 0; i < N; i++) if (!vis[i]) v.emplace_back(i); sort(v.begin(), v.end(), [&](int i, int j) { return H[i] < H[j]; }); for (int i = 0; i <= N; i++) vis[i] = 0; vector<int> inc; for (auto i : v) { int c = i, D = 0; while (c != N + 1) { D = H[c] - H[i]; if(vis[c]) break; vis[c] = 1; c = p[c]; } inc.emplace_back(D); } sort(inc.begin(), inc.end(), greater<>()); int acc = 0; for (auto i : inc) { acc++; mp[i] = acc; } } int max_towers(int L, int R, int D) { return mp.lower_bound(D)->second; }
#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...