Submission #880590

#TimeUsernameProblemLanguageResultExecution timeMemory
880590tsumondaiIzbori (COCI22_izbori)C++14
10 / 110
212 ms11484 KiB
#include <bits/stdc++.h> using namespace std; #define fi first #define se second #define pb push_back #define foru(i, l, r) for(int i = l; i <= r; i++) #define ford(i, r, l) for(int i = r; i >= l; i--) #define __TIME (1.0 * clock() / CLOCKS_PER_SEC) typedef pair<int, int> ii; typedef pair<ii, int> iii; typedef pair<ii, ii> iiii; const int N = 1e6 + 5, BLOCK_SIZE=450; const int oo = 1e9, mod = 1e9 + 7; int n, m, k, a[N], cnt[N], mp[N], s[N], t[N]; vector<int> arr; void update(int pos, int val){ for (int i=pos; i<BLOCK_SIZE; i+=i&(-i)) t[i]+=val; } int get(int pos){ if (pos<0) return 0; int sum=0; for (int i=pos; i; i-=i&(-i)) sum+=t[i]; return sum; } void process() { cin >> n; long long ans=0; for (int i=1; i<=n; ++i) cin >> a[i]; vector<int> sus(a+1, a+n+1); sort(sus.begin(),sus.end()); sus.resize(unique(sus.begin(),sus.end())-sus.begin()); for (int i=1; i<=n; ++i) a[i]=lower_bound(sus.begin(),sus.end(), a[i])-sus.begin()+1; for (int i=1; i<=n; ++i) ++mp[a[i]]; for (int l=1; l<=n; ++l){ int mx=0; for (int r=l; r<=n && r-l+1<=2*BLOCK_SIZE; ++r){ if (mp[a[r]]<=BLOCK_SIZE){ ++cnt[a[r]]; mx=max(mx, cnt[a[r]]); } if (mx*2>r-l+1) ++ans; } for (int r=l; r<=n && r-l+1<=2*BLOCK_SIZE; ++r){ if (mp[a[r]]<=BLOCK_SIZE) --cnt[a[r]]; } } for (int i=1; i<=n; ++i){ if (mp[i]<=BLOCK_SIZE) continue; memset(s, 0, sizeof s); memset(t, 0, sizeof t); for (int j=1; j<=n; ++j) if (a[j]==i) ++s[j]; else --s[j]; partial_sum(s, s+n+1, s); update(0+n+1, 1); for (int j=1; j<=n; ++j){ ans+=get(s[j]-1+n+1); update(s[j]+n+1, 1); } } cout << ans; return; } signed main() { cin.tie(0)->sync_with_stdio(false); //freopen(".inp", "r", stdin); //freopen(".out", "w", stdout); process(); cerr << "Time elapsed: " << __TIME << " s.\n"; return 0; } /* Xét các trường hợp đặc biệt Kiểm tra lại input/output Cố gắng trâu Lật ngược bài toán Keep calm and get VOI Flow: */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...