Submission #1270467

#TimeUsernameProblemLanguageResultExecution timeMemory
1270467horkaIzbori (COCI22_izbori)C++20
110 / 110
1269 ms6816 KiB
#include <bits/stdc++.h> using namespace std; const int gy=1250,c=4e5+12; using ll = long long; ll ans; int n; int val[c],g[c],h[c]; void query(int r){ while (r >= 0){ ans += val[r]; r = g[r]; } } void upd(int idx, int delta) { for (; idx < 2*n+1; idx = h[idx]) val[idx] += delta; } int main() { ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); cin>>n; for(int i=0; i<=2*n+5; i++) { g[i]=(i&(i+1))-1; h[i]=(i|(i+1)); } vector<int> pontok{0},v(n+1); for(int i=1; i<=n; i++) { cin>>v[i]; pontok.push_back(v[i]); } sort(pontok.begin(),pontok.end()); pontok.erase(unique(pontok.begin(),pontok.end()),pontok.end()); for(int i=1; i<=n; i++) { v[i]=lower_bound(pontok.begin(),pontok.end(),v[i])-pontok.begin(); } int mer=pontok.size(); vector<int> cnt(mer); for(int i=1; i<=n; i++) { cnt[v[i]]++; } vector<int> db(mer); for(int kezd=1; kezd<=n; kezd++) { int tmp=0; for(int i=kezd; i<=min(n,kezd+2*gy); i++) { if(++db[v[i]]>db[tmp]) tmp=v[i]; int f=i-kezd+1; if(db[tmp]>f/2 && cnt[tmp]<gy) ans++; } for(int i=kezd; i<=min(n,kezd+2*gy); i++) db[v[i]]=0; } for(int e=1; e<mer; e++) { if(cnt[e]>=gy) { for(int i=0; i<=2*n; i++) val[i]=0; int pref=0; upd(n,1); for(int i=1; i<=n; i++) { if(v[i]==e) pref++; else pref--; query(pref+n-1); upd(pref+n,1); } } } 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...