Cod sursa(job #2469740)

Utilizator Ykm911Ichim Stefan Ykm911 Data 7 octombrie 2019 22:10:39
Problema Secventa 5 Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <bits/stdc++.h>

using namespace std;

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

int n, l, u;
long long fr[(1 << 20) + 5];
long long v[(1 << 20) + 5], v2[(1 << 20) + 5];

unordered_map < long long, long long > M;

long long secv(int lung)
{
    long long ans = 0;
    int i = 1, j = 1, sizes = 0;
    for(i = 1; i <= n; i++)
    {
        for(; j <= n && sizes <= lung; j++)
        {
            if(fr[v[j]] == 0 && sizes == lung)break;
            if(fr[v[j]] == 0) sizes++;
            fr[v[j]]++;
        }
        ans += j - i;
        fr[v[i]]--;
        if(fr[v[i]] == 0)sizes--;
    }
    return ans;
}
int main()
{
    fin >> n >> l >> u;
    for(int i = 1; i <= n; i++)
    {
        fin >> v[i];
        v2[i] = v[i];
    }
    sort(v2 + 1, v2 + n + 1);
    int p = 0;
    for(int i = 1; i <= n; i++)
    {
        if(v2[i] != v2[i - 1]) p++;
        M[v2[i]] = p;
    }
    for(int i = 1; i <= n; i++)
        v[i] = M[v[i]];
    fout << secv(u) - secv(l - 1);
    return 0;
}