Pagini recente » Cod sursa (job #1784295) | Cod sursa (job #2777047) | Cod sursa (job #2930968) | Cod sursa (job #3258983) | Cod sursa (job #10667)
Cod sursa(job #10667)
using namespace std;
#include <cstdio>
#include <map>
#include <iostream>
int N, L, U;
unsigned int A[1<<20+2];
map<unsigned int,int> mp;
void resort()
{
}
long long doit( int LEN )
{
long long ret = 0;
int r = 0, dist = 0;
bool can;
mp.clear();
// cout << " here " << endl;
for( int i = 1; i <= N; i++ )
{
while( r + 1 <= N )
{
can = mp[ A[r+1] ];
if( !(can || dist + 1 <= LEN ) )
break;
if( !can )
dist++;
mp[ A[r+1] ]++;
++r;
}
mp[ A[i] ]--;
if( !mp[A[i]] )
dist--;
ret += (long long)( r ) - i + 1;
// cout << i << " : : " << r << endl;
// fflush( stdout );
}
return ret;
}
int main()
{
freopen("secv5.in", "r", stdin);
freopen("secv5.out", "w", stdout);
scanf("%d %d %d", &N, &L, &U);
for( int i = 1; i <= N; i++ )
scanf("%ud", A + i );
cout << doit( U ) - doit( L - 1 ) << endl;
return 0;
}