Submission #1168020

#TimeUsernameProblemLanguageResultExecution timeMemory
1168020thinknoexitDiversity (CEOI21_diversity)C++20
64 / 100
37 ms8124 KiB
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 300300;
int a[N];
ll qs[N];
int cnt[N];
int main() {
    cin.tie(nullptr)->sync_with_stdio(false);
    int n, q;
    cin >> n >> q;
    for (int i = 1;i <= n;i++) {
        cin >> a[i];
        cnt[a[i]]++;
    }
    while (q--) { int __; cin >> __ >> __; }
    vector<pair<int, int>> v;
    for (int i = 1;i <= 300000;i++) {
        if (cnt[i]) v.push_back({ cnt[i], i });
    }
    sort(v.begin(), v.end());
    deque<int> f, b;
    for (int i = 0;i < (int)v.size();i++) {
        if (i & 1) {
            for (int j = 1;j <= v[i].first;j++) f.push_back(v[i].second);
        }
        else {
            for (int j = 1;j <= v[i].first;j++) b.push_front(v[i].second);
        }
    }
    int idx = 0;
    for (int i = 0;i < (int)f.size();i++) {
        a[++idx] = f[i];
    }
    for (int i = 0;i < (int)b.size();i++) {
        a[++idx] = b[i];
    }
    ll ans = 1ll * n * (n + 1) / 2;
    for (int i = 1;i <= n;i++) {
        qs[i] = qs[i - 1] + (a[i] != a[i - 1]);
        ans += qs[i] * (2 * i - 1 - n);
    }
    cout << ans << '\n';
    //  1  1 1 2
    //  1  2 2 2
    // -3 -1 1 3
    //  1  1 1 2 2
    //  1  1 2 2 2
    // -4 -2 0 2 4
    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...