Submission #1257341

#TimeUsernameProblemLanguageResultExecution timeMemory
1257341proofyMoney (IZhO17_money)C++20
0 / 100
0 ms324 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace __gnu_pbds; template <class T> using ordered_set = tree<T, null_type,less<T>, rb_tree_tag,tree_order_statistics_node_update>; // find_by_order((int)k) returns iterator of the kth element // order_of_key((T)key) returns the number of elements less than this key int main() { ios::sync_with_stdio(0); cin.tie(0); int n; cin >> n; vector<int> a(n); for (int& u : a) cin >> u; map<int, int> st; for (int i = 0; i < n; i++) st[a[i]] += 1; a.insert(a.begin(), 0); auto adjacent = [&](int x, int y) { if (x == y) return st[x] >= 2; if (x > y) swap(x, y); auto iter = st.lower_bound(y); if (iter == st.begin()) return false; return prev(iter)->first == x; }; auto erase_element = [&](int x) { st[x] -= 1; if (st[x] == 0) st.erase(x); }; function<int(int)> solve = [&](int i) { if (i == 0) return 0; auto check = [&](int k) { for (int j = i - 1; j >= k; --j) if (a[j] > a[j + 1]) return false; vector<pair<int, int>> b = {{a[k], 1}}; for (int j = k + 1; j <= i; j++) if (a[j] == a[j - 1]) b.back().second += 1; else b.emplace_back(a[j], 1); if ((int)b.size() == 1) return st[b[0].first] >= b[0].second; if (st[b[0].first] < b[0].second) return false; if (st[b.back().first] < b.back().second) return false; for (int j = 1; j < (int)b.size() - 1; j++) { auto [x, y] = b[j]; if (st[x] != y) return false; } return true; }; int j = i; int l = 1, r = i; if (check(l)) j = l; else { while (r - l > 1) { int m = (l + r) / 2; if (check(m)) r = m; else l = m; } j = r; } for (int k = j; k <= i; k++) erase_element(a[k]); return 1 + solve(j - 1); }; cout << solve(n) << "\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...