Pagini recente » Cod sursa (job #3172035) | Cod sursa (job #277759) | Cod sursa (job #1518350) | Cod sursa (job #2359736) | Cod sursa (job #10436)
Cod sursa(job #10436)
#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;
}