Submission #377075

#TimeUsernameProblemLanguageResultExecution timeMemory
377075ijxjdjdMoney (IZhO17_money)C++14
100 / 100
255 ms33964 KiB
#include <bits/stdc++.h> #define FR(i, N) for (int i = 0; i < int(N); i++) #define all(x) begin(x), end(x) using namespace std; using ll = long long; multiset<int> lft; const int MAXN = (int)(1e6); int arr[MAXN + 5]; int cnt[MAXN+5]; int bk[MAXN+5]; int findLess(int i) { if (i == -1 || cnt[i] != 0) { return i; } else { return (bk[i] = findLess(bk[i])); } } int main() { cin.tie(0); cin.sync_with_stdio(0); int N; // N = (int)(1e6); cin >> N; FR(i, N) { cin >> arr[i]; cnt[arr[i]]++; // arr[i] = N-i; } for (int i = 0; i < MAXN; i++) { bk[i] = i-1; } int lst = arr[N-1]; int ans = 1; bool ori = true; for (int i = N-2; i >= 0; i--) { cnt[arr[i+1]]--; if (lst == arr[i]) { } else { int f = findLess(lst-1); if (f == arr[i]) { if (cnt[lst]) { if (ori) { ori = false; } else { ans++; ori = true; } } else { ori = false; } } else { ans++; ori = true; } } lst = arr[i]; } cout << ans << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...