Submission #999052

#TimeUsernameProblemLanguageResultExecution timeMemory
999052crafticatDiversity (CEOI21_diversity)C++17
4 / 100
16 ms5336 KiB
#include <bits/stdc++.h> using namespace std; using pii = pair<int,int>; using ll = long long; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int n, q; cin >> n >> q; vector<int> arr(n); for (int i = 0; i < n; ++i) { cin >> arr[i]; } for (int i = 0; i < q; ++i) { int l, r; cin >> l >> r; l--; vector<int> v; vector<int> app(300002); v.reserve(r - l); int s = r - l; for (int j = l; j < r; ++j) { v.push_back(arr[j]); } for (auto x : v) { app[x]++; } vector<pii> v2; for (auto x : v) { v2.emplace_back(app[x],x); } std::sort(v2.begin(), v2.end()); vector<pii> orderA, orderB; int last = -1; int leftS = 0, rightS = 0; for (auto [a, x] : v2) { if (last != x) { if (leftS < rightS) { orderA.emplace_back(x, a); leftS += a; } else { orderB.emplace_back(x,a); rightS += a; } } last = x; } vector<pii> order; for (auto x : orderA) { order.push_back(x); } std::reverse(orderB.begin(), orderB.end()); for (auto x : orderB) { order.push_back(x); } int a = 0; ll ans = 0; for (auto [x, amount] : order) { int b = a + amount; ll includeSub = a * (s - b); ll includePar = a * amount + (s - b) * amount; ll self = amount * (amount + 1) / 2; ans += self + includePar + includeSub; a += amount; } cout << ans << "\n"; } 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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...