Cod sursa(job #1525094)

Utilizator cristina_borzaCristina Borza cristina_borza Data 14 noiembrie 2015 18:58:12
Problema Secventa 5 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <fstream>
#include <cstring>
#include <map>

#define NMAX 1500000

using namespace std;

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

long long n , p , u , v[NMAX] , sol[NMAX];
map <long long , long long> c;

long long solve(long long val);

int main() {
    f >> n >> p >> u;

    for(int i = 1 ; i <= n ; ++i) {
        f >> v[i];
    }
    g << solve(u) - solve(p - 1);
    return 0;
}

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

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

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

    memset(sol , 0 , sizeof(sol));

    sol[1] = 1;
    c[v[1]] = 1;

    for(int i = 2 ; i <= n ; ++i) {
        if(c[v[i]] == 0) {
            ++nr;
        }

        ++c[v[i]];
        sol[i] = sol[i - 1];

        if(nr > val) {
            long long aux = sol[i];
            sol[i] += c[v[aux]];
            c[aux] = 0;

            --nr;
        }
    }

    for(int i = 1 ; i <= n ; ++i) {
        ans += (i - sol[i] + 1);
    }

    return ans;
}