Cod sursa(job #2525236)

Utilizator AlexPascu007Pascu Ionut Alexandru AlexPascu007 Data 16 ianuarie 2020 22:00:56
Problema Secventa 5 Scor 90
Compilator cpp-32 Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <bits/stdc++.h>
#define DIM (1<<20)+3
#define DIMBUFF 100001
using namespace std;
FILE *fin=fopen("secv5.in", "r");
FILE *fout=fopen("secv5.out", "w");
int n,l,u;
long long a=1LL,b=1LL,sol,v[DIM];
unordered_map<unsigned int,int> st,dr;
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(), u=numar();
    for (int i=1;i<=n;i++)
        v[i]=numar();
    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()>u) {
            dr[v[b]]--;
            if (dr[v[b]]==0)
                dr.erase(v[b]);
            b++;
        }
        sol+=a-b;
    }
    fprintf(fout,"%lld",sol);
    return 0;
}