Submission #1142755

#TimeUsernameProblemLanguageResultExecution timeMemory
1142755aykhnIzbori (COCI22_izbori)C++20
110 / 110
162 ms15432 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define inf 0x3F3F3F3F3F3F3F3F const int MXN = 2e5 + 5; const int B = 450; int freq[MXN * 2]; signed main() { ios_base::sync_with_stdio(0); cin.tie(0); int n; cin >> n; int a[n]; for (int &i : a) cin >> i; map<int, vector<int>> mp; for (int i = 0; i < n; i++) mp[a[i]].push_back(i); int res = 0; for (auto &[val, idx] : mp) { if (idx.size() < B) { for (int i = 0; i < idx.size(); i++) { for (int j = i; j < idx.size(); j++) { int sz = idx[j] - idx[i] + 1, cnt = j - i + 1; if (cnt * 2 <= sz) continue; int C = cnt * 2 - sz - 1; int A = min(C, idx[i] - (i ? idx[i - 1] : -1) - 1); int B = min(C, (j + 1 < idx.size() ? idx[j + 1] : n) - idx[j] - 1); int l1 = 0, r1 = C - B - 1; int l2 = C - B, r2 = A; l1 = max(0LL, l1), r1 = min(r1, A); l2 = max(0LL, l2), r2 = min(r2, A); if (l1 <= r1) res += (r1 - l1 + 1) * (B + 1); if (l2 <= r2) { res += (C + 1) * (r2 - l2 + 1); res -= (l2 + r2) * (r2 - l2 + 1) / 2; } } } } else { for (int &i : a) i = -1; for (int &i : idx) a[i] = 1; int cur = 0, S = 0; freq[0 + MXN] = 1; int L = MXN, R = MXN; for (int &i : a) { if (i == 1) { cur += freq[S + MXN]; S++; } else { cur -= freq[S - 1 + MXN]; S--; } res += cur; freq[S + MXN]++; L = min(L, S + MXN), R = max(R, S + MXN); } for (int i = L; i <= R; i++) freq[i] = 0; } } cout << res << '\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...