Submission #873178

#TimeUsernameProblemLanguageResultExecution timeMemory
873178tvladm2009Baloni (COCI15_baloni)C++17
20 / 100
772 ms96956 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 1e6 + 7; int n; int a[N]; bool vis[N]; set<int> s[N]; int h = 0; int get_nxt(int pos, int val) { pos++; auto it = s[val].lower_bound(pos); if (it == s[val].end()) { return -1; } s[val].erase(it); return *it; } void dfs(int i) { vis[i] = 1; --h; int j = get_nxt(i, h); if (h == 0) { return; } if (j == -1) { j = i; --h; } if (h == 0) { return; } dfs(j); } int main() { ios::sync_with_stdio(false); cin.tie(0); cin >> n; for (int i = 1; i <= n; ++i) { cin >> a[i]; s[a[i]].insert(i); } vector<int> ord(n); iota(ord.begin(), ord.end(), 1); sort(ord.begin(), ord.end(), [&](int x, int y) { return a[x] > a[y]; }); int ans = 0; for (auto i : ord) { if (!vis[i]) { h = a[i]; dfs(i); ++ans; } } cout << ans << "\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...