Submission #512338

#TimeUsernameProblemLanguageResultExecution timeMemory
512338KaguyaPo (COCI21_po)C++17
60 / 70
1095 ms12360 KiB
#include <bits/stdc++.h> using namespace std; #pragma GCC optimize("-O3") #pragma GCC optimize("-Ofast") int main() { ios::sync_with_stdio(false); cin.tie(0); int n; cin >> n; vector<int> a(n); bool have = false; for (auto& t : a) { cin >> t; if (t == 0) have = true; } vector<int> ve; for (int i = 0; i < n; i++) ve.push_back(a[i]); sort(ve.begin(), ve.end()); ve.resize(unique(ve.begin(), ve.end()) - ve.begin()); for (int i = 0; i < n; i++) { a[i] = lower_bound(ve.begin(), ve.end(), a[i]) - ve.begin(); } int ans = 0; vector<int> se; vector<bool> vis(n, false); vector<bool> was(n + 11, false); for (int i = 0; i < n; i++) if (!was[a[i]]) { se.push_back(a[i]); was[a[i]] = true; } sort(se.rbegin(), se.rend()); map<int, vector<int>> pos; for (int i = 0; i < n; i++) pos[a[i]].push_back(i); if (!have) { ans += 1; se.pop_back(); } for (int i = 0; i < n; i++) if (have && a[i] == 0) vis[i] = true; if (have && se.back() == 0) se.pop_back(); while (!se.empty()) { int x = se.back(); se.pop_back(); for (auto t : pos[x]) { if (vis[t]) continue; vis[t] = true; int i = t; ans += 1; while (i < n && a[i] >= x) { if (a[i] == x) vis[i] = true; i++; } if (a[i] == x) vis[i] = true; } } cout << ans << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...