Cod sursa(job #344552)

Utilizator RobybrasovRobert Hangu Robybrasov Data 30 august 2009 15:40:38
Problema Secventa 5 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <cstdio>
#include <vector>
#define N 1050000
#define MOD 666013

using namespace std;

int A[N];
vector<int> L[MOD];

void insert(int x)
{
    int nr=x%MOD;
    vector<int>::iterator it;
    for (it=L[nr].begin(); it!=L[nr].end() && *it!=x; it++);
    if (it==L[nr].end()) L[nr].push_back(x);
}

int exists(int x)
{
    int nr=x%MOD;
    vector<int>::iterator it;
    for (it=L[nr].begin(); it!=L[nr].end() && *it!=x; it++);

    return it!=L[nr].end();
}

void erase(int x)
{
    int nr=x%MOD;
    vector<int>::iterator it;
    for (it=L[nr].begin(); it!=L[nr].end() && *it!=x; it++);
    if (it==L[nr].end()) return;

    L[nr].erase(it);
}

int main()
{
    int n,l,u,i,j,k=0,kont=0,t;
	freopen("secv5.in","r",stdin);
	freopen("secv5.out","w",stdout);
	scanf("%d%d%d",&n,&l,&u);
    for (i=1; i<=n; i++) scanf("%d",&A[i]);

    for (i=1; i<=n; i++)
    {
        k=0;
        for (j=i; j<=n && k<=u; j++)
        {
            if (!exists(A[j])) k++;
            if (k>=l && k<=u) kont++;
            insert(A[j]);
        }
        t=j;
        for (j=i; j<=t; j++) erase(A[j]);
    }

    printf("%d",kont);

    return 0;
}