Cod sursa(job #2701619)

Utilizator Albert_GAlbert G Albert_G Data 31 ianuarie 2021 19:42:09
Problema Secventa 5 Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.23 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 lpoint=0,upoint=0;
    unsigned long long rez=0;
    for(int i=0;i<n;++i)
    {
        cin>>v[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;
        }
        if(lpoint>upoint) rez+=lpoint-upoint;
    }
    cout<<rez;
    return 0;
}