Cod sursa(job #1221314)

Utilizator cojocarugabiReality cojocarugabi Data 20 august 2014 06:11:29
Problema Secventa 5 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
# include <fstream>
# include <iostream>
# include <cstring>
# define int long long
using namespace std;
ifstream fi("secv5.in");
ofstream fo("secv5.out");
const int mod=666013;
typedef struct node
{
    int x,y;
    node *next;
} *nod;
nod h[mod];
int n,p,u;
int S[1<<21],V[1<<21];
int read()
{
    int p=0;
    char c[30];
    fi>>c;
    int k=strlen(c);
    for (int i=0;i<k;++i) p=p*10+c[i]-'0';
    return p;
}
int secv(int x)
{
    if (!x) return 0;
    int p=0;
    for (int i=1,a=0,b=0;i<=n;++i)
    {
        while (a<=x && b<=n)
            if (++V[S[++b]]==1)
                ++a;
        --V[S[b]];
        if (!V[S[b]]) --a;
        --V[S[i]];
        if (!V[S[i]]) --a;
        --b;
        p+=(b-i+1);
    }
    return p;
}
main(void)
{
    S[0]=1;
    int b=0;
    n=read();p=read();u=read();
    for (int i=1;i<=n;++i)
    {
        int x=read(),m=x%mod,v=0;
        for (nod p=h[m];p;p=p->next)
            if (p->x==x)
        {
            v=p->y;break;
        }
        if (!v)
        {
            nod p=new node;
            p->x=x;p->y=(v=(++b));p->next=h[m];h[m]=p;
        }
        S[i]=v;
    }
    fo<<(secv(u)-secv(p-1))<<"\n";
}