Cod sursa(job #2482814)

Utilizator victorv88Veltan Victor victorv88 Data 28 octombrie 2019 21:39:27
Problema Secventa 5 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <iostream>
#include <fstream>
#include <cstring>
#include <unordered_map>
#include <deque>
using namespace std;

ifstream f("secv5.in");
ofstream g("secv5.out");

deque<unsigned int>deck;

unsigned int n, l_min, l_max;

unsigned int a[1048600];

long long rez(unsigned int marime)
{
    if (marime==0)
        return 0;
    unsigned int ind=0;
    long long rez=0;
    unordered_map<unsigned int, int>fr;
//    fr[a[++ind]]++;
//    deck.push_back(ind);
//    while (fr.size()<=intmarime)
//    {
//        fr[a[++ind]]++;
//        deck.push_back(ind);
//        rez
//    }
//    fr[a[ind]]--;
//    deck.pop_back();
//    rez+=(deck.back()-deck.front()+1);
    fr[a[++ind]]++;
    deck.push_back(1);
    rez++;
    for(ind=2; ind<=n; ++ind)
    {
        fr[a[ind]]++;
        deck.push_back(ind);
        if (fr[a[ind]]==1 && fr.size()>marime)
        {
            bool ok=true;
            while (ok)
                {
                fr[a[deck.front()]]--;
                if (fr[a[deck.front()]]==0)
                    fr.erase(a[deck.front()]), ok=false;
                deck.pop_front();
                }
        }

        rez+=(deck.back()-deck.front()+1);

    }
    return rez;
}

int main()
{
    f >> n >> l_min >> l_max;
    for (unsigned int i=1; i<=n; ++i)
        f >> a[i];
    g << rez(0);
    return 0;
}