Cod sursa(job #2701605)

Utilizator Albert_GAlbert G Albert_G Data 31 ianuarie 2021 19:06:40
Problema Secventa 5 Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <fstream>
#include <unordered_map>
using namespace std;

ifstream cin("secv5.in");
ofstream cout("secv5.out");

constexpr int N = (1<<20) + 1;
unsigned int v[N];

int main()
{
    int n,l,u;
    cin>>n>>l>>u;
    for(int i=0;i<n;++i)
        cin>>v[i];
    unordered_map <unsigned int,int> lvec(N);
    unordered_map <unsigned int,int> uvec(N);
    unsigned int rez=0,lpoint=0,upoint=0;
    for(int i=0;i<n;++i)
    {
        if(lvec.find(v[i])==lvec.end())
        {
            lvec[v[i]]=1;
        }
        else
        {
            ++lvec[v[i]];
        }
        if(uvec.find(v[i])==uvec.end())
        {
            uvec[v[i]]=1;
        }
        else
        {
            ++uvec[v[i]];
        }
        while(lpoint < i && lvec.size()>=l)
        {
            if(lvec[v[lpoint]]==1) lvec.erase(v[lpoint]);
            else --lvec[v[lpoint]];
            ++lpoint;
        }
        while(upoint < i && uvec.size()>u)
        {
            if(lvec[v[upoint]]==1) uvec.erase(v[upoint]);
            else --uvec[v[upoint]];
            ++upoint;
        }
        rez+=lpoint-upoint;
    }
    cout<<rez;
    return 0;
}