Cod sursa(job #1065263)

Utilizator Al3ks1002Alex Cociorva Al3ks1002 Data 23 decembrie 2013 00:37:46
Problema Secventa 5 Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include<cstdio>
#include<vector>
using namespace std;
const int NMAX = (1<<20)+5;
const int MOD = 100009;
int N,L,U,i,j,k,X,r,ok,Nr,Cnt,A,B,Dist,Ap[NMAX],Ap2[NMAX],Dist2,E[NMAX];
long long SOL;
vector<pair<int,int> > V[MOD];
int main()
{
    freopen("secv5.in","r",stdin);
    freopen("secv5.out","w",stdout);
    scanf("%d%d%d",&N,&L,&U); A=U; B=L-1;
    for(i=1,j=1,k=1;i<=N;i++)
    {
        scanf("%d",&X); r=X%MOD; ok=1;
        for(vector<pair<int,int> >::iterator it=V[r].begin();it!=V[r].end();it++)
            if(it->first==X) {ok=0; Nr=it->second; break;}
        if(ok) V[r].push_back(make_pair(X,++Cnt)),Nr=Cnt;
        E[i]=Nr;
        Ap[Nr]++; if(Ap[Nr]==1) Dist++;
        Ap2[Nr]++; if(Ap2[Nr]==1) Dist2++;
        while(Dist>A)
        {
            j++; Ap[E[j-1]]--;
            if(Ap[E[j-1]]==0) Dist--;
        }
        while(Dist2>B)
        {
            k++; Ap2[E[k-1]]--;
            if(Ap2[E[k-1]]==0) Dist2--;
        }
        SOL+=i-j+1;
        SOL-=i-k+1;
    }
    printf("%lld\n",SOL);
    return 0;
}