제출 #708165

#제출 시각아이디문제언어결과실행 시간메모리
708165vjudge1Diversity (CEOI21_diversity)C++11
64 / 100
330 ms15260 KiB
// CEOI 2021 Day1 Diversity
#include <bits/stdc++.h>
using namespace std;
using LL = long long;
int main() {
  ios::sync_with_stdio(false), cin.tie(0);
  int n, q;
  cin >> n >> q;
  vector<int> A(n);
  map<int, int> M;
  for (int &a : A) cin >> a, M[a] = 0;
  int k = 0;
  for (auto &p : M) p.second = k++;
  vector<LL> cnt(k);
  for (int &a : A) a = M[a], ++cnt[a];  // 离散化

  int L, R;
  cin >> L >> R;
  if (q > 1) return 0;  // 只考虑64分的情况
  assert(q == 1 && L == 1 && R == n);

  LL ans = 0, BC[2] = {0}, bi = 0;
  sort(cnt.begin(), cnt.end());
  for (LL c : cnt) {  // 实验确定: 最优解一定是 元素的出现次数先递增再递减
    ans += c * (c + 1) / 2 + c * (n - c);
    LL &b = BC[bi ^= 1];
    ans += b * (n - c - b), b += c;
  }
  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...