Cod sursa(job #10436)

Utilizator cos_minBondane Cosmin cos_min Data 28 ianuarie 2007 14:13:40
Problema Secventa 5 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.61 kb
#include <stdio.h>
#include <vector>
#include <iterator>
#include <algorithm>
using namespace std;

#define in "secv5.in"
#define out "secv5.out"

int n, l, u;
vector<long long> v;
vector<int> niv;
vector<bool> mod;
vector<bool> sel;

int Ok(int,int);

int main()
{
    long long sol=0;
    int k = 0;
    freopen(in,"r",stdin);
    freopen(out,"w",stdout);
    
    scanf("%d%d%d",&n,&l,&u);
    v.resize(n+1);
    niv.resize(n+1);
    mod.resize(n+1);
    sel.resize(n+1);
    
    niv[0] = 1;
    for ( int i = 1; i <= n; i++ )
    {
        scanf("%lld",&v[i]);
        k = 0;
        for ( int j = 1; j < i; j++ )
        {
            if ( v[i] == v[j] ) 
            {
                 k += 1; 
                 break;
            }
        }
        niv[i] = niv[i-1] + k;
        mod[i] = k;
    }
    
    if ( l == 1 ) sol += n;
    
    for ( int i = 1; i < n; i++ )
    {
        for ( int j = i+1; j <= n; j++ )
        {
            if ( Ok(i,j) ) 
            {
                 sol += 1;
            }
        }
    }
    
    printf("%d",sol);
} 

int Ok(int i, int j)
{
    for ( int t = i; t <= j; t++ ) sel[t] = 0;
    
    int z=0;
    for ( int t = i; t <= j; t++ )
    {
        if ( mod[t] == 1 )
        {
             sel[t] = 1;
             for ( int q = i; q < t; q++ )
             {
                 if ( v[q] == v[t] && !sel[q] ) 
                 {
                      z++;
                 }
             }
        }
    }
    //printf("%d %d %d\n",i,j,z);
    if ( l <= j-i-z+1 && j-i-z+1 <= u ) return 1;
    return 0;
}