Pagini recente » Cod sursa (job #2054062) | Cod sursa (job #1442683) | Cod sursa (job #1841952) | Cod sursa (job #2949107) | Cod sursa (job #1047956)
#include <cstdio>
#include <tr1/unordered_map>
using namespace std;
using namespace std::tr1;
#define MAX_N 1 << 20
int v[MAX_N];
unordered_map< int, int > h;
void read( FILE *fin, int &n, int &l, int &u ) {
fscanf( fin, "%d%d%d", &n, &l, &u );
for ( int i = 0; i < n; ++i )
fscanf( fin, "%d", &v[i] );
}
void init( int n ) {
for ( int i = 0; i < n; ++i )
if ( h.find( v[i] ) != h.end() )
h.erase( v[i] );
}
int solve( int limit, int n ) {
init( n );
int ans = 0, 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]];
int len = i - left + 1;
ans += len;
}
return ans;
}
int main() {
FILE *fin, *fout;
fin = fopen( "secv5.in", "r" );
int n, l, u;
read( fin, n, l, u );
fclose( fin );
int ans = solve( u, n ) - solve( l - 1, n );
fout = fopen( "secv5.out", "w" );
fprintf( fout, "%d\n", ans );
fclose( fout );
}