Cod sursa(job #2450566)

Utilizator petrisorvmyVamanu Petru Gabriel petrisorvmy Data 23 august 2019 17:32:49
Problema Secventa 5 Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <fstream>
#include <algorithm>
#include <cstring>
#include <unordered_map>

#define ll unsigned int
#define MOD 666013

using namespace std;

ifstream f("secv5.in");
ofstream g("secv5.out");

int n,  r,l;
ll fr[(1<<20) + 2];
ll v[(1 << 20) + 1],v2[(1 << 20) + 1],  hash_size;
unordered_map <ll,ll> norm;


long long secv(int lungime)
{
    long long sol = 0;

    memset(fr, 0, sizeof(fr));
    int i = 1, j = 1, sizes = 0;
    while(i <= n)
    {
        while(j <= n && sizes <= lungime)
        {
            if(fr[v[j]] == 0 && sizes == lungime)
                break;
            if(fr[v[j]] == 0)
                sizes++;
            fr[v[j]]++;
            j++;
        }
        sol += j - i;
        fr[v[i]]--;
        if(fr[v[i]] == 0)
            sizes--;
        i++;
    }

    return sol;
}
int main()
{
    f >> n >> l >> r;
    for(int i = 1; i <= n; ++i)
    {
        f >> 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++;
        norm[v2[i]] = p;
    }

    for(int i = 1; i <= n; ++i)
        v[i] = norm[v[i]];
    g << secv(r) - secv(l - 1);
    return 0;
}