Cod sursa(job #2907557)

Utilizator radugheoRadu Mihai Gheorghe radugheo Data 30 mai 2022 18:52:58
Problema Secventa 5 Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.42 kb
#include <bits/stdc++.h>
#define DIM (1<<20 + 5)
#define DIMBUFF 100005
 
using namespace std;
 
FILE *fin =  fopen ("secv5.in", "r");
FILE *fout = fopen ("secv5.out", "w");
 
unordered_map <unsigned int, int> st, dr;
 
unsigned int n, l, r;
unsigned int v[DIM];
 
long long a, b, sol;
 
char buff[DIMBUFF];
int pp;
 
int numar() {
    int val = 0;
    while (!(buff[pp] >= '0' && buff[pp] <= '9')) {
        pp++;
        if (pp == DIMBUFF) {
            fread(buff, 1, DIMBUFF, fin);
            pp=0;
        }
    }
    while (buff[pp] >= '0' && buff[pp] <= '9') {
        val = val*10 + buff[pp] - '0';
        pp++;
        if (pp == DIMBUFF) {
            fread(buff, 1, DIMBUFF, fin);
            pp=0;
        }
    }
    return val;
}
 
int main(){
    fread(buff, 1, DIMBUFF, fin);
    n = numar(), l = numar(), r = numar();
    for (int i=1; i<=n; i++){
        v[i] = numar();
    }
    a = b = 1;
    for (int i=1; i<=n; i++){
        st[v[i]]++, dr[v[i]]++;
        while (st.size() >= l){
            st[v[a]]--;
            if (st[v[a]] == 0){
                st.erase (v[a]);
            }
            a++;
        }
        while (dr.size() > r){
            dr[v[b]]--;
            if (dr[v[b]] == 0){
                dr.erase (v[b]);
            }
            b++;
        }
        sol += (i - b + 1)- (i - a + 1);
    }
    fprintf (fout, "%lld", sol);
    return 0;
}