Submission #1140538

#TimeUsernameProblemLanguageResultExecution timeMemory
1140538NurislamMoney (IZhO17_money)C++20
0 / 100
0 ms324 KiB
#include <bits/stdc++.h> using namespace std; int main(){ int n; cin >> n; vector<int> a(n); for(int &i : a) cin >> i; if(is_sorted(a.begin(), a.end())) { return cout << 0 << '\n', 0; } vector<int> b = a; sort(b.begin(), b.end()); b.erase(unique(b.begin(), b.end()), b.end()); map<int,int> pre; for(int i = 1; i < b.size(); i++)pre[b[i]] = b[i-1]; vector<array<int,2>> v; for(int i = 0; i < n; ){ int r = i; while(r+1 < n && (a[r] == pre[a[r+1]] || a[r] == a[r+1]))r++; v.push_back({a[r], a[i]}); i = r+1; }; set<array<int,2>> st; st.insert({0,0}); st.insert({INT_MAX, 0}); for(auto [r, l] : v){ if((*st.begin())[0] > l){ st.insert({r, 1}); continue; } auto x = st.lower_bound({l, 0}); if((*x)[0] > l) x = prev(x); int cnt = (*x)[1]; st.erase(x); st.insert({r, cnt + 1}); }; int ans = 0; for(auto [x, cnt] : st ){ ans += ( cnt+1 ) / 2; } cout << ans << '\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...