Pagini recente » Cod sursa (job #1387165) | Cod sursa (job #166953) | Cod sursa (job #543403) | Cod sursa (job #996436) | Cod sursa (job #1234627)
#include<stdio.h>
#include<vector>
using namespace std;
#define LL unsigned long long
#define UINT unsigned int
const int NMAX = (1<<20) + 5, MOD = 666013;
int n, distinct;
UINT 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;
}
int cnt (int lim) {
int i, left, right, ans;
for(i = 0; i < MOD; ++ i)
h[i].clear();
left = 1;
right = distinct = ans = 0;
while(left <= n && right <= n + 1) {
while(distinct <= lim && right <= n) {
ins(x[right + 1]);
++ right;
}
ans += (LL)right - left;
//fprintf(stderr, "%d %d\n", left, right);
del(x[left]);
++ left;
}
//fprintf(stderr, "%d\n\n", ans);
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("%u", &x[i]);
printf("%d\n", cnt(u) - cnt(l - 1));
return 0;
}