This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
/**
____ ____ ____ ____ ____
||a |||t |||o |||d |||o ||
||__|||__|||__|||__|||__||
|/__\|/__\|/__\|/__\|/__\|
**/
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N_MAX = 300000;
int N, Q;
int A[N_MAX + 2];
ll solve (map <int, int> &mp) {
int sum = 0, cnt = 0;
ll sumLR = 0, sumRL = 0;
ll X = 0, Y = 0;
for (map <int, int> :: reverse_iterator it = mp.rbegin(); it != mp.rend(); it++) {
int len, occ; tie(len, occ) = *it;
for (int i = 1; i <= occ; i++) {
if (sumLR < sumRL) {
Y += sumRL * len + ((ll) sum * sum - X) / 2;
X += (ll) len * len;
sumLR += sum;
sumRL += (ll) len * cnt;
sum += len;
cnt += 1;
} else {
Y += sumLR * len + ((ll) sum * sum - X) / 2;
X += (ll) len * len;
sumRL += sum;
sumLR += (ll) len * cnt;
sum += len;
cnt += 1;
}
}
}
ll ret = (cnt - 1) * X + 2 * Y;
ret += (ll) sum * (cnt - 1);
ret /= 2;
return ret;
}
int main () {
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> N >> Q;
for (int i = 1; i <= N; i++) {
cin >> A[i];
}
sort(A + 1, A + N + 1);
vector <int> v;
for (int i = 1; i <= N; i++) {
if (A[i] == A[i - 1]) {
v.back()++;
} else {
v.push_back(1);
}
}
int l, r;
cin >> l >> r;
map <int, int> mp;
for (int len : v) {
mp[len]++;
}
cout << (ll) (int) v.size() * N * (N + 1) / 2 - solve(mp) << "\n";
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |