Pagini recente » Cod sursa (job #629137) | Cod sursa (job #765855) | Cod sursa (job #1255722) | Cod sursa (job #204682) | Cod sursa (job #1097055)
#include <cstdio>
#include <map>
#include <fstream>
#define NMAX (1 << 20) + 7
#define LL unsigned long long
#define MaxChar 10000000
#define verf ( (++CharB==MaxChar) ? ( in.read(Buffer,MaxChar),CharB=0 ) : (1) )
using namespace std;
ifstream in("secv5.in");
LL n, l, u;
LL a[NMAX];
map< LL, int > H;
int CharB = MaxChar - 1;
char Buffer[MaxChar];
void cit(LL &a){
bool ok = 0;
for(; !((Buffer[CharB] >= '0' && Buffer[CharB] <= '9') || (Buffer[CharB] == '-')); verf)
;
if(Buffer[ CharB ] == '-' ){
++ CharB;
ok = 1;
}
for(a = 0; (Buffer[CharB] >= '0' && Buffer[CharB] <= '9'); a *= 10, a +=(Buffer[CharB] - '0'), verf);
if(ok)
a = -a;
}
inline LL solve(int k){
LL Ans = 0, Number = 0;
H.clear();
for(LL i = 1, j = 1; i <= n; ++i){
if(H[a[i]] > 0)
++ H[a[i]];
else{
++ Number;
H[a[i]] = 1;
}
while(Number > k){
-- H[a[j]];
if(H[a[j]] <= 0)
-- Number;
++j;
}
Ans += (i - j + 1);
}
return Ans;
}
int main(){
freopen("secv5.out", "w", stdout);
cit(n); cit(l); cit(u);
for(int i = 1; i <= n; ++i)
cit(a[i]);
printf("%lld\n", solve(u) - solve(l - 1));
return 0;
}