Cod sursa(job #2607170)

Utilizator PopescuAndreiAlexandruPopescu Andrei Alexandru PopescuAndreiAlexandru Data 29 aprilie 2020 13:51:15
Problema Secventa 5 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <queue>
#include <map>

using namespace std;

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

int n,l,u,x,nrl,nru,lastu=1,lastl=1;

long long sol;

queue <int> Ql,Qu;

map <int,int> vizl,vizu;

int main()
{
    fin>>n>>l>>u;
    for(int i=1;i<=n;i++)
    {
        fin>>x;
        Ql.push(x);
        if(!vizl[x])
            nrl++;
        if(!vizu[x])
            nru++;
        vizl[x]++;
        vizu[x]++;
        while(!Ql.empty())
        {
            int elm=Ql.front();
            if(nrl>l)
            {
                Ql.pop();
                vizl[elm]--;
                lastl++;
                if(!vizl[elm])
                    nrl--;
            }
            else
            {
                if(vizl[elm]>1)
                {
                    vizl[elm]--;
                    lastl++;
                    Ql.pop();
                }
                else
                    break;
            }
        }
        while(nru>u && Qu.empty())
        {
            int elm=Qu.front();
            Qu.pop();
            vizu[elm]--;
            lastu++;
            if(!vizu[elm])
                nru--;
        }
        if(nrl==l)
            sol+=lastl-lastu+1;
    }
    fout<<sol<<'\n';
}