Cod sursa(job #1525219)

Utilizator cristina_borzaCristina Borza cristina_borza Data 14 noiembrie 2015 21:01:50
Problema Secventa 5 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <cstdio>
//#include <fstream>
#include <cstring>
#include <unordered_map>

#define NMAX 1500000

using namespace std;

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

long long n , p , u;
unsigned int v[NMAX];
unordered_map <unsigned int , unsigned int> c;

long long solve(unsigned int val);

int main() {
    freopen("secv5.in" , "r" , stdin);
    freopen("secv5.out" , "w" , stdout);

    scanf("%lld %lld %lld" , &n , &p , &u);//

    //f >> n >> p >> u;

    for(int i = 1 ; i <= n ; ++i) {
        scanf("%ud" , &v[i]);//
        //f >> v[i];
    }

    long long sol = solve(u) - solve(p - 1);
    printf("%lld" , sol);

    return 0;
}

long long solve(unsigned int val) {
    long long ans = 0 , nr = 1;

    if(val == 0) {
        return 0;
    }

    c.clear();

    for(int i = 1 ; i <= n ; ++i) {
        ++c[v[i]];

        int x = c.size();

        while(c.size() > val) {
            --c[v[nr]];
            if(!c[v[nr]]) {
                c.erase(v[nr]);
            }
            ++nr;
        }

        ans += (i - nr + 1) * 1LL;
    }

    return ans;
}