Submission #492931

#TimeUsernameProblemLanguageResultExecution timeMemory
492931blueDiversity (CEOI21_diversity)C++17
0 / 100
2 ms1484 KiB
#include <iostream>
#include <vector>
#include <algorithm>
#include <deque>
using namespace std;

using ll = long long;

int main()
{
    int N, Q;
    cin >> N >> Q;

    vector<int> ct(1+300'000, 0);
    for(int i = 1; i <= N; i++)
    {
        int a;
        cin >> a;
        ct[a]++;
    }

    int l, r;
    cin >> l >> r;

    vector<ll> val;
    for(int f = 1; f <= 300'000; f++)
        if(ct[f])
            val.push_back(ct[f]);

    sort(val.begin(), val.end());

    deque<ll> val2;
    for(int i = 0; i < int(val.size()); i++)
    {
        if(i % 2 == 0) val2.push_back(val[i]);
        else val2.push_front(val[i]);
    }
    val2.push_front(0);

    int G = int(val2.size()) - 1;

    vector<ll> prefsum(1+G, 0);
    for(int i = 1; i <= G; i++) prefsum[i] = prefsum[i-1] + val2[i];

    // for(int f = 1; f <= G; f++) cerr << val2[f] << ' ';
    // cerr << '\n';

    ll res = 0;
    for(int i = 1; i <= G; i++)
    {
        res += (val2[i]*(val2[i]+1))/2 + prefsum[i-1]*val2[i] + (prefsum[G] - prefsum[i])*val2[i] + (prefsum[i-1])*(prefsum[G] - prefsum[i]);
        // cerr << "!\n";
        // cerr << (prefsum[G] - prefsum[i])*val2[i] << '\n';
        // cerr << (val2[i]*(val2[i]+1))/2 << '\n';
        // cerr << prefsum[i-1]*val2[i] << '\n';
        // cerr << (prefsum[i-1])*(prefsum[G] - prefsum[i]) << '\n';
        // cerr << i << " : " << (val2[i]*(val2[i]+1))/2 + prefsum[i-1]*val2[i] + (prefsum[G] - prefsum[i])*val2[i] * (prefsum[i-1])*(prefsum[G] - prefsum[i]);
        // cerr << '\n';
    }

    cout << res << '\n';
}
#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...