Cod sursa(job #1279176)

Utilizator deresurobertoFMI - Deresu Roberto deresuroberto Data 29 noiembrie 2014 21:13:45
Problema Secventa 5 Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
//Deresu Roberto - FMI
//Re :)
#include<fstream>
#include<map>
#define nx 1100007
using namespace std;
int n,l,u;
long long v[nx];
map<long long,int>mymap;
map<long long,int> :: iterator it;

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

int secv(int l)
{
    int nr, 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 += (i-j)*(i-j+1)/2 - (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 += (i-j)*(i-j+1)/2 - (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];

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

    fout<<nru-nrl;

	return 0;
}