Pagini recente » Cod sursa (job #2941759) | Cod sursa (job #466154) | Cod sursa (job #2856214) | Cod sursa (job #1588001) | Cod sursa (job #1783608)
#include <bits/stdc++.h>
using namespace std;
const int nmax = (1 << 20) + 10;
int n, l, r;
int a[nmax], ap[nmax];
map < int, int > idx;
long long ans;
void read_input()
{
freopen("secv5.in","r",stdin);
int cnt = 0;
scanf("%d %d %d", &n, &l, &r);
for (int i = 1; i <= n; ++i)
{
long long x;
scanf("%lld", &x);
if (idx.count(x) == 0)
idx[x] = ++cnt;
a[i] = idx[x];
}
}
long long answer(int x)
{
int left = 1, cnt = 0;
long long ret = 0;
for (int i = 1; i <= n; ++i)
ap[a[i]] = 0;
for (int i = 1; i <= n; ++i)
{
ap[a[i]]++;
if (ap[a[i]] == 1)
cnt++;
while (cnt > x)
{
ap[a[left]]--;
if (ap[a[left]] == 0) cnt--;
left++;
}
ret += (i - left + 1);
}
return ret;
}
void solve()
{
ans = answer(r) - answer(l - 1);
}
void print_answer()
{
freopen("secv5.out","w",stdout);
printf("%d\n", ans);
}
int main()
{
read_input();
solve();
print_answer();
return 0;
}