제출 #851461

#제출 시각아이디문제언어결과실행 시간메모리
851461epicci23Izbori (COCI22_izbori)C++17
110 / 110
2447 ms12092 KiB
#include "bits/stdc++.h" using namespace std; #define pb push_back #define endl "\n" #define int long long #define sz(x) ((int)(x).size()) #define all(x) (x).begin(),(x).end() const int N = 4e5 + 5; int fw[N]; void upd(int c){ for(;c<N;c+=c&-c) fw[c]++; } int query(int c,int res=0){ for(;c;c-=c&-c) res+=fw[c]; return res; } void solve(){ int n; cin >> n; int ar[n+1]; for(int i=1;i<=n;i++){ cin >> ar[i]; } int ans=0; vector<int> zip; for(int i=1;i<=n;i++) zip.pb(ar[i]); sort(all(zip)); zip.erase(unique(all(zip)),zip.end()); // dont forget std::unique function! for(int i=1;i<=n;i++) ar[i]=upper_bound(all(zip),ar[i])-zip.begin(); const int BL = 500; int freq[n+1]; memset(freq,0,sizeof(freq)); for(int i=1;i<=n;i++) freq[ar[i]]++; for(int i=1;i<=n;i++){ if(freq[i]<BL) continue; int nar[n+1]; for(int j=1;j<=n;j++){ if(ar[j]==i) nar[j]=1; else nar[j]=-1; } memset(fw,0,sizeof(fw)); int cur=0; upd(cur+n); for(int j=1;j<=n;j++){ cur+=nar[j]; ans+=query(cur+n-1); upd(cur+n); } } for(int i=1;i<=2*BL;i++){ if(i>n) continue; int cfreq[n+1]; pair<int,int> coco={-1,-1}; memset(cfreq,0,sizeof(cfreq)); for(int j=1;j<=n;j++){ cfreq[ar[j]]++; if(j>i) cfreq[ar[j-i]]--; if(cfreq[ar[j]]>i/2) coco={ar[j],cfreq[ar[j]]}; if(coco.first!=-1 && cfreq[coco.first]<=i/2) coco={-1,-1}; if(j>=i && coco.first!=-1 && freq[coco.first]<BL) ans++; } } cout << ans << endl; } int32_t main(){ cin.tie(0); ios::sync_with_stdio(0); int t=1;//cin >> t; while(t--) solve(); 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...