Submission #1291877

#TimeUsernameProblemLanguageResultExecution timeMemory
1291877NValchanovDiversity (CEOI21_diversity)C++20
0 / 100
1 ms560 KiB
#include <iostream>
#include <vector>
#include <cassert>
#include <algorithm>
#include <deque>
#include <map>

using namespace std;

typedef long long llong;

const int MAXN = 3e5 + 10;

int n, q;
int a[MAXN];
map < int, int > cnt;
int maxa;

void read()
{
    cin >> n >> q;

    for(int i = 1; i <= n; i++)
    {
        cin >> a[i];

        cnt[a[i]]++;
        maxa = max(maxa, a[i]);
    }
}

void solve()
{
    while(q--)
    {
        int left, right;
        cin >> left >> right;
    }

    vector < int > cnts;

    for(pair < int, int > p : cnt)
    {
        cnts.push_back(p.second);
    }

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

    reverse(cnts.begin(), cnts.end());

    deque < int > dq;

    int sz = cnts.size();

    for(int i = 0; i < sz; i++)
    {
        if(i & 1)
        {
            dq.push_back(cnts[i]);
        }
        else
        {
            dq.push_front(cnts[i]);
        }
    }

    vector < int > suff(sz + 1, 0);

    for(int i = sz - 1; i >= 0; i--)
    {
        suff[i] = suff[i + 1] + dq[i];
    }

    llong ans = 0;
    llong div = 0;

    for(int i = 0; i < sz; i++)
    {
        div += 1LL * dq[i] * (i + 1);
    }

    for(int i = 0; i < sz; i++)
    {
        ans += 1LL * dq[i] * div;

        div -= suff[i];
    }

    cout << ans << endl;
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);

    read();
    solve();

    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...