Pagini recente » Cod sursa (job #2326310) | Cod sursa (job #2364975) | Cod sursa (job #1923436) | Cod sursa (job #1929284) | Cod sursa (job #1239382)
#include <cstdio>
#include <vector>
using namespace std;
unsigned long N, L, U;
unsigned long tot, t, crt;
vector<unsigned long> v;
vector<unsigned long> h[650000];
vector<unsigned long> a[650000]; // de cate ori apar
inline unsigned long hashv(unsigned long val) {
return val % 650000;
}
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 < L && i < (long) N) {
i++;
if(put(v[i]))
crt++;
if(crt == L) {
pozl = i;
}
} else if(crt <= U && i < (long) N) {
i++;
if(put(v[i]))
crt++;
tot++;
} else {
while(i > pozl) {
i--;
if(remove(v[i + 1]))
crt--;
}
j++;
if(remove(v[j - 1]))
crt--;
}
if(j == N - 1)
break;
}
printf("%ld\n", tot);
return 0;
}