# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1054034 | sleepntsheep | Diversity (CEOI21_diversity) | C11 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <cstdio>
#include <algorithm>
#define N 300001
#define A 300001
int o, n, q, a[N], fr[N], fr2[N];
long long z, y;
long long c2(int x) { return (x - 1ll) * x / 2ll; }
int main() {
scanf("%d%d", &n, &q);
for (int i = 1; i <= n; ++i) scanf("%d", a + i), ++fr[a[i]];
for (int i = 1; i <= 300000; ++i)
++fr2[fr[i]];
int sum = 0;
for (int i = 1; i <= n; ++i)
for (; fr2[i]--; )
a[++o] = i, sum += i;
for (int i = 1; i <= o; ++i) {
int psum = 0;
for (int j = 2; j <= o; psum += a[j++]) {
int a_ = a[j - 1];
int b_ = a[j];
int x = psum;
int y = n - psum - a_ - b_;
if (-c2(b_ + y + 1) -c2(a_ + x + 1) > -c2(b_ + x + 1) - c2(a_ + y + 1))
std::swap(a[j], a[j - 1]);
}
}
int psum = 0;
for (int i = 1; i <= o; psum += a[i++]) {
z += c2(n + 1) - c2(psum + 1) - c2(n - psum - a[i] + 1);
}
printf("%lld", z);
}