Pagini recente » Cod sursa (job #2229709) | Cod sursa (job #311662) | Cod sursa (job #1817777) | Cod sursa (job #1638311) | Cod sursa (job #2689422)
#include <algorithm>
#include <stdio.h>
#define MAX 1 << 20 + 1
using namespace std;
FILE *fin;
pair< unsigned, int > v[ MAX ];
unsigned a[ MAX ], f[ MAX ];
int n, st, dr;
long long caca( int limita ){
long long rez = 0;
unsigned pipi = 0, cate = 0;
for( int i = 0; i < n; i++ ){
if( !f[ a[ i ] ] )
while( pipi <= i && cate == limita ){
if( --f[ a[ pipi ] ] == 0 )
--cate;
++pipi;
}
if( ++f[ a[ i ] ] == 1 )
++cate;
rez += ( long long )i - pipi + 1;
}
for( int i = 0; i < n; i++ )
f[ i ] = 0;
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()
{
fin = fopen( "secv5.in", "r" );
fscanf( fin, "%d%d%d", &n, &st, &dr );
for( int i = 0; i < n; i++ ){
fscanf( fin, "%u", &v[ i ].first );
v[ i ].second = i;
}
fclose( fin );
sort( v, v + n );
int el = 0;
a[ v[ 0 ].second ] = el;
for( int i = 1; i < n; i++ )
if( v[ i - 1 ].first == v[ i ].first )
a[ v[ i ].second ] = el;
else a[ v[ i ].second ] = ++el;
FILE *fout = fopen( "secv5.out", "w" );
fprintf( fout, "%lld", caca( dr ) - caca( st - 1 ) );
fclose( fout );
return 0;
}