Cod sursa(job #1136163)

Utilizator sddddgjdZloteanu Anastasia sddddgjd Data 8 martie 2014 20:59:32
Problema Secventa 5 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include<stdio.h>
#define N 1048576
int v[N],orig[N],ap[N],n;
int cautbin(int st,int dr,int val)
{
    int mij=(st+dr)/2;
    while(st<=dr)
    {
        mij=(st+dr)/2;
        if(orig[mij]==val)
            return mij;
        else
            if(orig[mij]<val)
                st=mij+1;
            else
                dr=mij-1;
    }
    return 0;
}
long long getsecv(int val) {
    long long secv=0;
    int i;
    for(i=0;i<N;i++)
        ap[i]=0;
    int j,nr=0;
    i=0;
    for(j=0;j<n;j++)
    {
        if(ap[v[j]]==0)
            nr++;
        ap[v[j]]++;
        while(nr>val)
        {
            ap[v[i]]--;
            if(ap[v[i]]==0)
                nr--;
            i++;
        }
        secv+=j-i+1;
    }
    return secv;
}
int main()
{
    FILE *fin,*fout;
    fin=fopen("secv5.in","r");
    fout=fopen("secv5.out","w");
    int l,u;
    fscanf(fin,"%d%d%d",&n,&l,&u);
    int i;
    for(i=0; i<n; i++)
    {
        fscanf(fin,"%d",&v[i]);
        orig[i]=v[i];
    }
    i=0;
    int poz=0;
    while(i<n)
    {
        while(orig[poz]==orig[i]&&i<n)
            i++;
        if(i<n)
            orig[++poz]=orig[i];
        i++;
    }
    for(i=0;i<n;i++)
        v[i]=cautbin(0,poz,v[i]);
    fprintf(fout,"%lld",getsecv(u)-getsecv(l-1));
    return 0;
}