Pagini recente » Cod sursa (job #294024) | Cod sursa (job #1463418) | Cod sursa (job #2259268) | Cod sursa (job #376589) | Cod sursa (job #1234263)
#include<stdio.h>
#include<vector>
using namespace std;
const int NMAX = (1<<20) + 5, MOD = 666013;
int n, distinct, x[NMAX];
vector < pair <int, int> > hash[MOD];
vector < pair <int, int> >::iterator it;
void del (int val) {
int ln = val % MOD;
for(it = hash[ln].begin(); it != hash[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 = hash[ln].begin(); it != hash[ln].end(); ++ it)
if(it->first == val) {
++ it->second;
if(it->second == 1)
++ distinct;
found = 1;
}
if(!found)
hash[ln].push_back(make_pair(val, 1)),
++ distinct;
}
int cnt (int lim) {
int i, left, right, ans;
distinct = 0;
for(i = 0; i < MOD; ++ i)
hash[i].clear();
left = 1;
right = ans = 0;
while(left <= n && right <= n ) {
while(distinct < lim && right < n) {
ins(x[right + 1]);
++ right;
}
ans += 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("%d\n", cnt(u) - cnt(l - 1));
return 0;
}