Pagini recente » Cod sursa (job #1074189) | Cod sursa (job #1119204) | Cod sursa (job #2035336) | Cod sursa (job #1265014) | Cod sursa (job #1047975)
#include <cstdio>
#include <tr1/unordered_map>
using namespace std;
using namespace std::tr1;
#define uint unsigned int
#define ll unsigned long long
#define MAX_C 11
#define MAX_N 1 << 20
char read_aux[MAX_C];
uint v[MAX_N];
unordered_map< uint, int > h;
uint get_int( char s[MAX_C] ) {
int i = 0;
uint val = 0;
while ( s[i] >= '0' && s[i] <= '9' ) {
val = ( uint ) val * 10 + ( s[i] - '0' );
++i;
}
return val;
}
void read( int &n, int &l, int &u ) {
scanf( "%d%d%d\n", &n, &l, &u );
for ( int i = 0; i < n; ++i ) {
gets( read_aux );
v[i] = get_int( read_aux );
}
}
ll solve( int limit, int n ) {
if ( limit == 0 )
return 0;
h.clear();
ll ans = 0;
int left = 0;
for ( int i = 0; i < n; ++i ) {
if ( h.find( v[i] ) == h.end() )
while ( left <= i && ( int ) h.size() == limit ) {
--h[v[left]];
if ( h[v[left]] == 0 )
h.erase( v[left] );
++left;
}
++h[v[i]];
ans += ( ll ) i - left + 1;
}
return ans;
}
int main() {
freopen( "secv5.in", "r", stdin );
freopen( "secv5.out", "w", stdout );
int n, l, u;
read( n, l, u );
ll ans = solve( u, n ) - solve( l - 1, n );
printf( "%lld\n", ans );
}