Cod sursa(job #988571)

Utilizator misinozzz zzz misino Data 23 august 2013 12:03:53
Problema Secventa 5 Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include<fstream>
#include<vector>
#define MOD 666013
using namespace std;
ifstream f("secv5.in");
ofstream g("secv5.out");
int i,n,l1,l2,nr1,nr2,x,nr,l,u,v1[1100000],v2[1100000],nor[1100000];
long long sol;
vector<pair<int,int> >has[MOD];
inline int ha(int x)
{
    int key=x%MOD;
    for(unsigned int i=0;i<has[key].size();++i)
    {
        if(has[key][i].first==x)
        return has[key][i].second;
    }
    ++nr;
    has[key].push_back(make_pair(x,nr));
    return nr;
}
int main()
{
    f>>n>>l>>u;
    for(i=1;i<=n;++i)
    {
        f>>x;
        nor[i]=ha(x);

    }
    l1=l2=1;
    nr1=nr2=0;
    for(i=1;i<=n;++i)
    {
        while(l1<=n&&nr1<l)
        {
            nr1+=!v1[nor[l1++]]++;
            /*if(!v1[nor[l1]])
            ++nr1;
            ++v1[nor[l1]];
            ++l1;*/
        }
        while(l2<=n&&nr2+!v2[nor[l2]]<=u)
        {
            nr2+=!v2[nor[l2++]]++;
/*            if(!v2[nor[l2]])
            ++nr2;
            ++v2[nor[l2]];
            ++l2;*/
        }
        if(nr1>=l)
        sol+=(l2-l1+1);
        --v1[nor[i]];
        --v2[nor[i]];
        if(!v1[nor[i]])
        --nr1;
        if(!v2[nor[i]])
        --nr2;
    }
    g<<sol<<'\n';
    return 0;
}