Submission #1142928

#TimeUsernameProblemLanguageResultExecution timeMemory
1142928HasanV11010238Izbori (COCI22_izbori)C++20
25 / 110
3035 ms5932 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define MAX 300000 #define mod 1000000007 int ti; vector<ll> f; void update(int x){ for (; x <= ti; x = (x | (x + 1))){ f[x]++; } } ll query(int r){ ll ans = 0; for (; r > 0; r = (r & (r + 1)) - 1){ ans += f[r]; } return ans; } int n; ll ans = 0; vector<int> v; void calc(int x){ f.assign(2 * n + 3, 0); update(n); int pr = 0; for (int i = 1; i <= n; i++){ if (v[i] == x) pr++; else pr--; ans += query(pr - 1 + n); update(pr + n); } } const int bl = 2000; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n; v.assign(n + 1, 0); set<int> se; map<int, int> ma; for (int i = 1; i <= n; i++){ cin>>v[i]; se.insert(v[i]); } ti = 2 * n + 2; int no = 1; for (auto el : se){ ma[el] = no; no++; } vector<int> cn(n + 1, 0), cnt(n + 1, 0); for (int i = 1; i <= n; i++){ v[i] = ma[v[i]]; } for (int i = 1; i <= n; i++){ cn[v[i]]++; if (cn[v[i]] == bl + 1){ calc(v[i]); } } for (int i = 1; i <= n; i++){ int to = min(i + 2 * bl, n), wh = 0; int ma = 0; for (int j = i; j <= to; j++){ cnt[v[j]]++; if (cnt[v[j]] > ma){ ma++; wh = v[j]; } if (ma * 2 > (j - i + 1) && cn[wh] <= bl){ ans++; } } for (int j = i; j <= to; j++){ cnt[v[j]]--; } } 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...