Pagini recente » Cod sursa (job #2563512) | Cod sursa (job #1093502) | Cod sursa (job #1869299) | Cod sursa (job #1799836) | Cod sursa (job #1234273)
#include<stdio.h>
#include<vector>
using namespace std;
#define LL unsigned long long
const int NMAX = (1<<20) + 5, MOD = 666013;
int n, distinct;
LL x[NMAX];
vector < pair <LL, int> > h[MOD];
vector < pair <LL, int> >::iterator it;
void del (int val) {
int ln = val % MOD;
for(it = h[ln].begin(); it != h[ln].end(); ++ it)
if(it->first == val) {
-- it->second;
if(it->second == 0)
-- distinct;
}
}
void ins (int val) {
int ln = val % MOD, found = 0;
for(it = h[ln].begin(); it != h[ln].end(); ++ it)
if(it->first == val) {
++ it->second;
if(it->second == 1)
++ distinct;
found = 1;
}
if(!found)
h[ln].push_back(make_pair(val, 1)),
++ distinct;
}
LL cnt (int lim) {
int i, left, right;
LL ans;
distinct = 0;
for(i = 0; i < MOD; ++ i)
h[i].clear();
left = 1;
right = ans = 0;
while(left <= n && right <= n ) {
while(distinct < lim && right < n) {
ins(x[right + 1]);
++ right;
}
ans += (LL)right - left + 1;
del(x[left]);
++ left;
}
return ans;
}
int main() {
freopen("secv5.in", "r", stdin);
freopen("secv5.out", "w", stdout);
int l, u, i;
scanf("%d%d%d", &n, &l, &u);
for(i = 1; i <= n; ++ i)
scanf("%d", &x[i]);
printf("%u\n", cnt(u) - cnt(l - 1));
return 0;
}