Cod sursa(job #2906992)

Utilizator madalin1902Florea Madalin Alexandru madalin1902 Data 28 mai 2022 13:09:46
Problema Secventa 5 Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <bits/stdc++.h>
using namespace std;

ifstream fin("secv5.in");
ofstream fout("secv5.out");

int n, u, l;
int ap[(1<<20) + 1], id[(1<<20) + 1];
unsigned int x[(1<<20) + 1], y[(1<<20) + 1];

long long secv(int k)
{
    for(int i = 1; i <= n; ++i)
        ap[i] = 0;

    long long st = 1, cnt = 0, sz = 0;

    for(int dr = 1; dr <= n; ++dr)
    {
        if(!ap[y[dr]])
            ++sz;
        ++ap[y[dr]];
        while(sz > k)
        {
            --ap[y[st]];
            if(ap[y[st]] == 0)
                --sz;
            ++st;
        }
        cnt += dr - st + 1;
    }
    return cnt;
}

bool cmp(int a, int b)
{
    return x[a] < x[b];
}

int main() {
    fin >> n >> l >> u;
    for (int i = 1; i <= n; ++i) {
        fin >> x[i];
        id[i] = i;
    }
    fin.close();

    sort(id + 1, id + n + 1, cmp);

    for (int i = 1; i <= n; ++i){
        if (i > 1 && x[id[i]] == x[id[i - 1]])
            y[id[i]] = y[id[i - 1]];
        else
            y[id[i]] = i;
    }

    fout << secv(u) - secv(l - 1);
    fout.close();

    return 0;
}