Pagini recente » Cod sursa (job #2727263) | Cod sursa (job #282144) | Cod sursa (job #708104) | Cod sursa (job #1628421) | Cod sursa (job #2689415)
#include <stdio.h>
#include <map>
using namespace std;
FILE *fin;
unsigned n, v[ 1 << 20 + 1 ];
map< unsigned, unsigned > a;
long long caca( unsigned limita ){
long long rez = 0;
unsigned i = 0, cate = 0, st = 0;
for( ; i < n; i++ ){
if( !a[ v[ i ] ] )
while( st <= i && cate == limita ){
--a[ v[ st ] ];
if( a[ v[ st ] ] == 0 )
--cate;
++st;
}
if( !a[ v[ i ] ] )
++cate;
++a[ v[ i ] ];
rez += ( long long )i - st + 1;
}
a.clear();
return rez;
}
int read_int(){
int rez = 0, ch;
while( !isdigit( ( ch = fgetc( fin ) ) ) );
do
rez = rez * 10 + ch - '0';
while( isdigit( ( ch = fgetc( fin ) ) ) );
return rez;
}
int main()
{
unsigned st, dr;
fin = fopen( "secv5.in", "r" );
n = read_int();
st = read_int();
dr = read_int();
for( int i = 0; i < n; i++ )
v[ i ] = read_int();
fclose( fin );
FILE *fout = fopen( "secv5.out", "w" );
fprintf( fout, "%lld\n", caca( dr ) - caca( st - 1 ) );
fclose( fout );
return 0;
}