Cod sursa(job #2700784)

Utilizator Albert_GAlbert G Albert_G Data 28 ianuarie 2021 19:54:57
Problema Secventa 5 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.07 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,minel,maxel;
    cin>>n>>minel>>maxel;
    for(int i=0;i<n;++i)
        cin>>v[i];
    unordered_map <unsigned int,int> folosit(N);
    int rez=0,j=0;
    int dif=0;
    for(int i=0;i<n;++i)
    {
        if(folosit.size()>=minel-1)
        {
            if(folosit.find(v[i])==folosit.end())
            {
                folosit[v[i]]=0;
                ++dif;
            }
            ++folosit[v[i]];
            if(folosit.size()<=maxel)
            {
                ++rez;
            }
            while(dif>=minel && j<=i)
            {
                if(folosit[v[j]]==1)
                {
                    --dif;
                    ++rez;
                    folosit.erase(v[i]);
                }
                ++j;
            }
        }
        else
        {
            if(folosit.find(v[i])==folosit.end())
            {
                folosit[v[i]]=0;
                ++dif;
            }
            ++folosit[v[i]];
        }
    }
    folosit.clear();
    for(int i=0;i<n;++i)
    {
        if(folosit.find(v[i])==folosit.end())
        {
            folosit[v[i]]=0;
        }
        ++folosit[v[i]];
    }
    if(folosit.size()>= minel && folosit.size()<=maxel) ++rez;
    cout<<rez;
    return 0;
}
/**
if(i<n-1 && ( folosit.size()<maxel || (folosit.size()==maxel && folosit.find(v[i+1])!=folosit.end() )))
        {
            ++i;
            if(folosit.find(v[i])==folosit.end())
            {
                folosit[v[i]]=0;
            }
            ++folosit[v[i]];
            if(folosit.size()>=minel)
            {
                ++rez;
            }
        }
        else
        {
            if(j+minel-1<=i)
            {
                --folosit[v[j]];
                if(!folosit[v[j]]) folosit.erase(v[j]);
                ++j;
            }
        }
**/
/// 13 , 13 , 7 , 9 , 9