Cod sursa(job #993259)

Utilizator LauraAb.Laura Abef LauraAb. Data 3 septembrie 2013 16:03:34
Problema Secventa 5 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("secv5.in");
ofstream g("secv5.out");
int n,l,u;
int a[100];
int sol;
int fr1[100],fr2[100],c1,c2,st,dr1,dr2,solutie,p;

void Citire()
{   int i;
    f>>n>>l>>u;
    for(i=1;i<=n;i++)
    f>>a[i];
}
int Problema(int p)
{
    int i;
    int sol=0;
    fr1[a[1]]=fr2[a[1]]=1;
    c1=c2=1;
    dr1=1;
    dr2=1;
    st=1;

    while(dr2<=n)
    {
        if(c1<p)
        {
            ++dr1;
            if(++fr1[a[dr1]]==1)
            ++c1;
        }

        if(c2<=p)
        {
            ++dr2;
            if(++fr2[a[dr2]]==1)
            ++c2;
        }

        else
        {
            sol+=dr2-dr1;
            if(--fr1[a[st]]==0)
            --c1;
            if(--fr2[a[st]]==0)
            --c2;
            ++st;
        }
    }

    if(c1==p && c2==p+1)
    sol+=dr2-dr1;

    for(i=0;i<=100;i++)
    {
        fr1[i]=fr2[i]=0;
    }


    return sol;
}

int main()
{   int i;
    Citire();
    for(i=l;i<=u;i++)
    solutie+=Problema(i);
    g<<solutie<<"\n";

    f.close();
    g.close();
    return 0;
}