Submission #527960

#TimeUsernameProblemLanguageResultExecution timeMemory
5279601neParkovi (COCI22_parkovi)C++14
0 / 110
3094 ms17436 KiB
#include<iostream> #include<algorithm> #include<functional> #include<numeric> #include<vector> #include<utility> #include<map> #include<set> using namespace std; long long merge(int left, int mid, int right, vector<int64_t>& arr) { vector<int64_t>temp; int i = left, j = mid + 1; long long ans = 0; while (i <= mid && j <= right) { if (arr[i] >= arr[j]) { temp.push_back(arr[i]); ++i; } else { temp.push_back(arr[j]); ++j; ans += (mid - i + 1); } } while (i <= mid) { temp.push_back(arr[i]); ++i; } while (j <= right) { temp.push_back(arr[j]); ++j; } for (auto x : temp) { arr[left] = x; ++left; } return ans; } long long mergesort(int left, int right, vector<int64_t>& arr) { int mid = (left + right) >> 1; if (left >= right)return 0; long long ans = 0; ans += mergesort(left, mid, arr); ans += mergesort(mid + 1, right, arr); ans += merge(left, mid, right, arr); return ans; } int main() { int n;cin >> n; vector<int>arr(n); bool ok = true; for (int i = 0;i < n;++i) { cin >> arr[i]; if (arr[i] > 2)ok = false; arr[i]--; } if (ok) { int64_t ans = 0; vector<int64_t>freq(n+1, 0); for (int i = 0;i < n;++i) { if (arr[i] == 0) { freq[i+1]++; } else freq[i+1]--; freq[i + 1] += freq[i]; } ans += mergesort(0, n, freq); for (int i = 0;i <= n;++i) { freq[i] = 0; } for (int i = 0;i < n;++i) { if (arr[i] == 0) { freq[i+1]--; } else freq[i+1]++; freq[i+1] += freq[i]; } ans += mergesort(0, n, freq); cout << ans << '\n'; return 0; } int64_t ans = n; arr.push_back(-1); for (int i = 2;i <= n;++i) { map<int, int>freq; multiset < pair<int, int>, greater<pair<int, int>>>mp; for (int j = 0;j < i;++j) { freq[arr[j]]++; } for (auto x : freq) { mp.insert({ x.second,x.first }); } for (int j = 0;j <= n - i;++j) { auto x = *mp.begin(); if (x.first > i / 2) { ans++; } mp.erase({ freq[arr[j]],arr[j] }); freq[arr[j]]--; mp.insert({ freq[arr[j]],arr[j] }); freq[arr[j + i]]++; mp.insert({ freq[arr[j + i]],arr[j + i] }); } } 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...