Cod sursa(job #809031)

Utilizator alexalghisiAlghisi Alessandro Paolo alexalghisi Data 7 noiembrie 2012 19:55:37
Problema Secventa 5 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.48 kb
#include <iostream>
#include <fstream>
#include <vector>
#define KEY 666013
using namespace std;

vector<pair<int,int> > hash[66015];
int p[(1<<20)+13];
int maxi[(1<<20)+13],mini[(1<<20)+13];

int main()
{
    int n,l,L,k=0;
    ifstream f("secv5.in");
    ofstream g("secv5.out");
    f>>n>>l>>L;
    for(int i=1;i<=n;i++)
    {
        int x;
        bool gasit=false;
        f>>x;
        int niv=x%KEY;
        for(int j=0;j<hash[niv].size();j++)
            if(hash[niv][j].first==x)
            {
                gasit=true;
                p[i]=hash[niv][j].second;
                break;
            }
        if(!gasit)
         {
            hash[niv].push_back(make_pair(x,++k));
            p[i]=k;
         }
    }
    int distmin=0,distmax=0,cmin=1,cmax=1,total=0;
    for(int i=1;i<=n;i++)
    {
        if(maxi[p[i]]==0)
            distmax++;
        if(mini[p[i]]==0)
            distmin++;
        ++maxi[p[i]];
        ++mini[p[i]];
        while(distmin>=l)
        {
            --mini[p[cmin]];
            if(!mini[p[cmin]])
                distmin--;
            cmin++;
        }
        while(distmax>L)
        {
            --maxi[p[cmax]];
            if(!maxi[p[cmax]])
                distmax--;
            cmax++;
        }
        total+=cmin-cmax;

      // cout<<"i:"<<i<<" cmin :"<<cmin<<" cmax:"<<cmax<<endl;

       // cout<<" minime : "<<distmin<<" maxime :"<<distmax<<endl;
    }
    g<<total;
    return 0;
}