Pagini recente » Cod sursa (job #2557454) | Cod sursa (job #224014) | Cod sursa (job #705503) | Cod sursa (job #415870) | Cod sursa (job #2691623)
#include <bits/stdc++.h>
using namespace std;
const long long LIM = (1LL << 20) + 5;
unordered_map<long long, long long> m;
long long n, l, u, r, v[LIM], f[LIM];
long long func(long long d)
{
long long ans = 0;
if (d == 0)
return ans;
memset(f,0,sizeof(f));
long long cnt = 0, st = 1;
for (long long dr=1;dr<=n;dr++){
if (f[v[dr]] == 0){
cnt ++;
}
f[v[dr]] ++;
if (cnt <= d) ans += (dr-st+1);
else{
while(cnt > d){
f[v[st]] --;
if (f[v[st]] == 0) --cnt;
++st;
}
ans += (dr - st + 1);
}
}
return ans;
}
int main() {
freopen("secv5.in", "r", stdin);
freopen("secv5.out", "w", stdout);
scanf("%lld%lld%lld", &n, &l, &u);
for (long long i=1;i<=n;i++){
scanf("%lld", &v[i]);
if (m[v[i]] == 0)
m[v[i]] = ++r, v[i] = r;
else
v[i] = m[v[i]];
}
m.clear();
printf("%lld\n", func(u)-func(l-1));
return 0;
}