Pagini recente » Cod sursa (job #531159) | Cod sursa (job #2351286) | Cod sursa (job #1944036) | Cod sursa (job #760035) | Cod sursa (job #1243862)
#include <cstdio>
#include <vector>
using namespace std;
#define MOD 666013
unsigned long N, L, U;
unsigned long tot, t, crt, rez;
vector<unsigned long> v;
vector<unsigned long> h[MOD];
vector<unsigned long> a[MOD]; // de cate ori apar
inline unsigned long hashv(unsigned long val) {
return val % MOD;
}
inline bool verif(unsigned long val) {
if(h[hashv(val)].empty())
return false;
unsigned long i;
for(i = 0; i < h[hashv(val)].size(); i++)
if(val == h[hashv(val)][i])
return true;
return false;
}
inline bool put(unsigned long val) {
unsigned long i;
if(!verif(val)) {
h[hashv(val)].push_back(val);
a[hashv(val)].push_back(1);
return true;
} else {
for(i = 0; i < h[hashv(val)].size(); i++) {
if(h[hashv(val)][i] == val)
a[hashv(val)][i]++;
}
}
return false;
}
inline bool remove(unsigned long val) {
unsigned long i;
if(verif(val)) {
for(i = 0; i < h[hashv(val)].size(); i++) {
if(h[hashv(val)][i] == val) {
a[hashv(val)][i]--;
if(a[hashv(val)][i] == 0) {
a[hashv(val)].erase(a[hashv(val)].begin() + i);
h[hashv(val)].erase(h[hashv(val)].begin() + i);
return true;
}
break;
}
}
}
return false;
}
int main() {
long i, j, pozl;
freopen("secv5.in", "r", stdin);
freopen("secv5.out", "w", stdout);
scanf("%lu %lu %lu", &N, &L, &U);
for(i = 0; i <= N; i++) {
scanf("%lu", &t);
v.push_back(t);
}
i = -1;
j = 0;
while(true) {
if(crt <= U && i < (long) N) {
i++;
if(put(v[i]))
crt++;
tot += (i - j + 1);
} else {
j++;
if(remove(v[j - 1]))
crt--;
}
if(j == N - 1)
break;
}
rez = tot;
/*while(j <= i){
remove(v[j]);
j++;
}*/
for(i = 0; i < MOD; i++) {
h[i].clear();
a[i].clear();
}
i = -1;
j = 0;
crt = 0;
tot = 0;
while(true) {
if(crt < L && i < (long) N) {
i++;
if(put(v[i]))
crt++;
tot += (i - j + 1);
} else {
j++;
if(remove(v[j - 1]))
crt--;
}
if(j == N - 1)
break;
}
rez = rez - tot;
printf("%ld\n", rez);
return 0;
}