Pagini recente » Cod sursa (job #989163) | Cod sursa (job #2653648) | Cod sursa (job #2300409) | Cod sursa (job #697567) | Cod sursa (job #2657545)
#include <fstream>
#include <vector>
using namespace std;
const int NMAX = (1 << 20);
const int MOD = 666013;
unsigned int v[NMAX + 2];
vector < pair<unsigned int, unsigned int> > myhash[MOD];
unsigned int k;
void add_hash( unsigned int x ){
unsigned int i = 0, code = x % MOD;
while( i < myhash[code].size() && x != myhash[code][i].first )
++i;
if( i == myhash[code].size() ){
myhash[code].push_back({x, 1});
++k;
}
else
++myhash[code][i].second;
}
void erase_hash( unsigned int x ){
unsigned int i = 0, code = x % MOD;
while( i < myhash[code].size() && x != myhash[code][i].first )
++i;
if( i < myhash[code].size() ){
--myhash[code][i].second;
if( !myhash[code][i].second ){
myhash[code].erase(myhash[code].begin() + i);
--k;
}
}
}
void reset(){
unsigned int i;
i = k = 0;
for( i = 0; i < MOD; ++i )
myhash[i].clear();
}
long long solve( int n, int x ){
reset();
int st, dr;
long long rez = 0;
st = dr = 1;
while( dr <= n ){
add_hash(v[dr++]);
while( st <= n && k > x )
erase_hash(v[st++]);
rez = rez + 1LL * (dr - st + 1LL);
}
return rez;
}
int main() {
ifstream fin( "secv5.in" );
ofstream fout( "secv5.out" );
int n, l, u, i;
fin >> n >> l >> u;
for( i = 1; i <= n; ++i )
fin >> v[i];
fout << solve(n, u) - solve(n, l - 1);
return 0;
}