Pagini recente » Cod sursa (job #2693779) | Cod sursa (job #482026) | Cod sursa (job #3203366) | Cod sursa (job #1545154) | Cod sursa (job #352850)
Cod sursa(job #352850)
#include <cstdio>
#include <vector>
#include <cstring>
#define maxn 1100000
#define mod 266013
using namespace std;
unsigned int n, l, u, i, j, t, nr, ok;
char ss[12100000];
char *pp;
unsigned int v[maxn], vnou[maxn], ct[maxn], poz[maxn];
unsigned int h[mod][15], x[mod][15], ls[mod];
long long sol;
inline unsigned int read_value() {
unsigned int val = 0;
for (; '0' <= *pp && *pp <= '9'; pp++)
val = val * 10 + *pp - '0';
pp++;
return val;
}
void read_data() {
fread(ss, 1, 12000000, stdin);
pp = ss;
n = read_value(); l = read_value(); u = read_value();
for (i = 1; i <= n; i++) {
v[i] = read_value();
// fprintf(stderr, "%d\n", v[i]);
}
}
inline void norm() {
for (i = 1; i <= n; i++) {
t = (v[i] % mod);
// fprintf(stderr, "%d %d ", i, t);
ok = 0;
for (j = 0; j < ls[t]; j++)
if (v[h[t][j]] == v[i]) {
ok = 1;
poz[i] = j;
break;
}
if (ok == 0) {
h[t][ls[t]] = i;
poz[i] = ls[t];
nr++;
x[t][ls[t]] = nr;
ls[t]++;
}
}
for (i = 1; i <= n; i++) {
t = (v[i] % mod);
vnou[i] = x[t][poz[i]];
}
memcpy(v, vnou, sizeof(v));
}
inline unsigned long long baga(unsigned int x) {
unsigned int l;
long long sol = 0;
if (x == 0)
return 0;
memset(ct, 0, sizeof(ct));
l = 1; nr = 0;
for (i = 1; i <= n; i++) {
ct[v[i]]++;
if (ct[v[i]] == 1)
nr++;
if (nr > x) {
while (ct[v[l]] != 1 && l < i) {
ct[v[l]]--;
l++;
}
ct[v[l]]--; l++;
nr--;
}
sol += (i - l + 1);
}
return sol;
}
int main() {
freopen("secv5.in", "r", stdin);
freopen("secv5.out", "w", stdout);
read_data();
norm();
// return 0;
sol = baga(u) - baga(l - 1);
printf("%lld\n", sol);
return 0;
}