Submission #1291861

#TimeUsernameProblemLanguageResultExecution timeMemory
1291861NValchanovDiversity (CEOI21_diversity)C++20
0 / 100
1 ms572 KiB
#include <iostream>
#include <vector>
#include <cassert>
#include <algorithm>

using namespace std;

typedef long long llong;

const int MAXN = 3e5 + 10;

int n, q;
int b[MAXN];
int a[MAXN];
int m;

vector < int > pos;

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

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

void solve()
{
    sort(a + 1, a + 1 + m);

    pos.clear();

    for(int i = 2; i <= m; i++)
    {
        if(a[i] != a[i - 1])
        {
            pos.push_back(i - 1);
        }
    }

    pos.push_back(m);

    int ptr = 0;

    llong ans = 0;

    for(int i = 1; i <= m; i++)
    {
        while(ptr < pos.size() && pos[ptr] < i)
            ptr++;

        int cnt = 1;
        int last = i - 1;

        for(int j = ptr; j < pos.size(); j++)
        {
            int len = pos[j] - last;

            ans += 1LL * len * cnt;

            cnt++;
            last = pos[j];
        }
    }

    cout << ans << endl;
}

void process_queries()
{
    for(int i = 1; i <= q; i++)
    {
        int left, right;
        cin >> left >> right;

        m = right - left + 1;

        for(int i = 1; i <= m; i++)
        {
            a[i] = b[left + i - 1];
        }

        solve();
    }
}

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

    read();
    process_queries();

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