Submission #1165437

#TimeUsernameProblemLanguageResultExecution timeMemory
1165437A_M_NamdarIzbori (COCI22_izbori)C++20
110 / 110
487 ms12536 KiB
#include <bits/stdc++.h> using namespace std; const long long N = 2e5 + 10, SQ = 300; long long n, a[N], ps[N], cnt[N * 2], cnt2[N * 2], ans; void compress() { set<long long> s; map<long long, long long> id; for (long long i = 0; i < n; i++) s.insert(a[i]); for (long long i = 0; !s.empty(); i++) { id[*s.begin()] = i; s.erase(s.begin()); } for (long long i = 0; i < n; i++) a[i] = id[a[i]]; } void check(long long x) { ps[0] = N; for (long long i = 0; i < n; i++) ps[i + 1] = ps[i] + (a[i] == x) - (a[i] != x); long long tmp = 0; cnt2[ps[n]]++; for (long long i = n - 1; i >= 0; i--) { if (ps[i + 1] > ps[i]) tmp += cnt2[ps[i + 1]]; else tmp -= cnt2[ps[i]]; ans += tmp; cnt2[ps[i]]++; } memset(cnt2, 0, sizeof cnt2); } void input() { cin >> n; for (long long i = 0; i < n; i++) cin >> a[i]; } void solve() { compress(); for (long long i = 0; i < n; i++) { cnt[a[i]]++; if (cnt[a[i]] == SQ) check(a[i]); } for (long long i = 0; i < n; i++) { long long maxi = 0, p = 0; for (long long j = i; j < min(n, i + SQ * 2); j++) { cnt2[a[j]]++; if (maxi < cnt2[a[j]]) maxi = cnt2[a[j]], p = a[j]; if (maxi * 2 > j - i + 1 && cnt[p] < SQ) ans++; } for (long long j = i; j < min(n, i + SQ * 2); j++) cnt2[a[j]]--; } cout << ans; } int main() { ios:: sync_with_stdio(0), cin.tie(0), cout.tie(0); input(); solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...