제출 #1018774

#제출 시각아이디문제언어결과실행 시간메모리
1018774vjudge1Izbori (COCI22_izbori)C++17
40 / 110
67 ms18020 KiB
#include <bits/stdc++.h> #define fast cin.tie(0)->sync_with_stdio(0); #define int long long #define inf ((int)1e18) using namespace std; void solve1(int n) { vector <int> arr(n); for(int i = 0; i < n; i++) { cin >> arr[i]; } auto compress = [&](vector <int> &a) { vector <pair<int, int> > v(a.size()); for(int i = 0; i < n; i++) { v[i] = {a[i], i}; } sort(v.begin(), v.end()); for(int i = 0, ind = 0; i < n; i++) { if(i and v[i].first != v[i - 1].first) ind++; a[v[i].second] = ind; } }; compress(arr); int ans = 0; for(int l = 0; l < n; l++) { vector <int> cnt(n); int mx = 0; for(int r = l; r < n; r++) { cnt[arr[r]]++; mx = max(mx, cnt[arr[r]]); if(mx > (r - l + 1) / 2) ans++; } } cout << ans << "\n"; } void solve2(int n) { vector <int> arr(n+1), pre(n+1); for(int i = 1; i <= n; i++) { cin >> arr[i]; if(arr[i] == 2) arr[i] = -1; pre[i] = arr[i] + pre[i-1]; } int sub = 0; map <int, int> mp; for(int i = n; i > 0; i--) { mp[pre[i]]++; sub += mp[pre[i - 1]]; } cout << n * (n + 1) / 2 - sub << "\n"; } int32_t main(){ fast int n; cin >> n; if(n <= 2000) solve1(n); else solve2(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...