Cod sursa(job #2707215)

Utilizator BlueLuca888Girbovan Robert Luca BlueLuca888 Data 16 februarie 2021 17:59:19
Problema Secventa 5 Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <iostream>
#include <fstream>
#include <bits/stdc++.h>
#include <unordered_map>
#define DIM (1<<20 + 5)
#define DIMBUFF 100005

using namespace std;

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

FILE *citire = fopen("secv5.in", "r");

unordered_map <unsigned int, int> st, dr;
unsigned int n, l, u, v[DIM];
long long a, b, sol;
char buff[DIMBUFF];
int pp;

int read() {
    int val = 0;

    while (!(buff[pp] >= '0' && buff[pp] <= '9'))
        if (++pp == DIMBUFF) {
            fread(buff, 1, DIMBUFF, citire);
            pp=0;
        }


    while (buff[pp] >= '0' && buff[pp] <= '9') {
        val = val*10 + buff[pp] - '0';
        if (++pp == DIMBUFF) {
            fread(buff, 1, DIMBUFF, citire);
            pp=0;
        }
    }
    return val;
}

int main(){
    fread(buff, 1, DIMBUFF, citire);

    n=read();
    l=read();
    u=read();
    for(int i=1; i<=n; i++)
        v[i]=read();

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

        while(st.size() >= l)
            if (--st[v[++a]] == 0)
                st.erase(v[a]);

        while(dr.size() > u)
            if (--dr[v[++b]] == 0)
                dr.erase(v[b]);

        sol+=a-b;
    }

    fout<<sol;
    return 0;
}