Cod sursa(job #1282204)

Utilizator deresurobertoFMI - Deresu Roberto deresuroberto Data 3 decembrie 2014 23:41:19
Problema Secventa 5 Scor 100
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2014, Anul I Marime 1.2 kb
//Deresu Roberto - FMI
//Re :)
#include<fstream>
#include<unordered_map>
#define nx 1100007
using namespace std;
int n,l,u;
unsigned int v[nx];
unordered_map<unsigned int, int>mymap;
unordered_map<unsigned int, int> :: iterator it;

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

long long secv(int l)
{
    long long nr;
    int  i, j, k;

    nr =  k = 0;
    j = 1;

    for(i=1;i<=n;i++)
    {
        it = mymap.find(v[i]);

        if(it != mymap.end())
            it->second ++;
        else
            mymap.insert(make_pair(v[i],1));

        if(mymap.size() > l)
        {
            nr += 1LL*(i-j)*(i-j+1)/2 - 1LL*(k-j)*(k-j+1)/2;
            k = i;

            while(mymap.size() > l)
            {
                it = mymap.find(v[j++]);
                it->second --;

                if(it->second == 0)
                    mymap.erase(it);
            }
        }
    }

    nr += 1LL*(i-j)*(i-j+1)/2 - 1LL*(k-j)*(k-j+1)/2;

    mymap.clear();
    return nr;
}

int main()
{
    fin>>n>>l>>u;

    for(int i=1;i<=n;i++)
        fin>>v[i];

    long long nrl = secv(l-1);
    long long nru = secv(u);

    fout<<nru-nrl;

	return 0;
}