Cod sursa(job #1413513)

Utilizator Mihai22eMihai Ionut Enache Mihai22e Data 1 aprilie 2015 22:01:56
Problema Secventa 5 Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <map>

#include <cstdio>
using namespace std;

const int MAX_N = (1 << 20) + 2;

int N, L, U;
unsigned v[MAX_N];
map < unsigned, int > M;

long long solve(int l) {
    long long ret = 0;

    M.clear();

    for(int i = 1, j = 0, cnt = 0; i <= N; ++i) {
        while(j < N) {
            if(M[v[j + 1]] == 0 && cnt == l) {
                break;
            }
            ++j;
            if(M[v[j]] == 0) {
                ++cnt;
            }
            ++M[v[j]];

            ret += j - i + 1;
        }

        --M[v[i]];
        if(M[v[i]] == 0) {
            --cnt;
        }
    }

    return ret;
}

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

    scanf("%d %d %d", &N, &L, &U);
    for(int i = 1; i <= N; ++i) {
        scanf("%ud", &v[i]);
    }

    printf("%lld\n", solve(U) - solve(L - 1));

    return 0;
}