Cod sursa(job #1152372)

Utilizator Barcau_EmanuelBarcau Emanuel Barcau_Emanuel Data 24 martie 2014 18:01:15
Problema Secventa 5 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.52 kb
#include<fstream>
#include<vector>
using namespace std;
ifstream f("secv5.in");
ofstream g("secv5.out");
long long i,j,n,p,jp,u,nrel,rez,k,o,x,y,c[1048580];
vector<long long>a[1000004];
vector<long long>b[1000004];

void include(long long x)
{
    long long i,j,ok;
    i=x%1000003;
    ok=0;
    for(j=0;j<a[i].size();j++)
    {
        if(a[i][j]==x)
        {
            b[i][j]++;
            j=a[i].size()+1;
            ok=1;
        }
    }
    if(ok==0)
    {
        a[i].push_back(x);
        b[i].push_back(1);
        nrel++;
    }
}

void erase(long long x)
{
    long long i,j;
    i=x%1000003;
    for(j=0;j<a[i].size();j++)
    {
        if(a[i][j]==x)
        {
            if(b[i][j]>1)
             {
               b[i][j]--;
               j=a[i].size()+1;
             }
             else
               {
                 a[i][j]=0;
                 b[i][j]=0;
                 j=a[i].size()+1;
                 nrel--;
               }
        }
    }
}


int main()
{
    f>>n>>u>>p;
    for(i=1;i<=n;i++) f>>c[i];

    for(i=1;i<=n;i++)
    {
        include(c[i]);
        for(j=i+1;j<=n;j++)
        {
             include(c[i]);
             if(nrel>max(p,u))
             {
                 jp=j;
                 j=n+1;
             }
             else if(nrel>=min(u,p)&&nrel<=max(u,p)) rez++;
        }
        for(j=jp;j>=i+1;j--)
        {
            erase(c[j]);
        }
        erase(c[i]);
    }

    g<<rez<<" ";

    return 0;
}