Pagini recente » Cod sursa (job #3040467) | Cod sursa (job #524472) | Cod sursa (job #334311) | Cod sursa (job #314815) | Cod sursa (job #1459639)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <cstring>
#define MAXN (1 << 20) + 2
#define MOD 666013
#define list (x % MOD)
using namespace std;
unsigned int N, no, l, u, L[MAXN], used[MAXN];
vector <pair <unsigned int, unsigned int>> G[MOD];
inline decltype(G[0].begin()) find_val(unsigned int x){
decltype(G[0].begin()) it = G[list].begin();
for (; it != G[list].end(); ++it)
if (it->first == x) return it;
return it;
}
inline unsigned int insert_val(unsigned int x){
decltype(G[0].begin()) it;
it = find_val(x);
if (it == G[list].end()){
G[list].push_back(make_pair(x, ++no));
return no;
}
return it->second;
}
inline unsigned long long compute(unsigned int c){
if (c < 1) return 0;
memset(used, 0, (N + 1) * sizeof(unsigned int));
unsigned long long ans = 0, j = 1;
for (unsigned int i = 1; i <= N; ++i){
if (!used[L[i]] && c) --c;
else if (used[L[i]] < j){
for (; used[L[j]] > j; ++j);
++j;
}
used[L[i]] = i;
ans += (i - j + 1);
}
return ans;
}
int main(){
freopen("secv5.in", "r", stdin);
freopen("secv5.out", "w", stdout);
scanf("%d %d %d", &N, &l, &u);
for (unsigned int i = 1, x; i <= N; ++i)
scanf("%ud", &x),
L[i] = insert_val(x);
printf("%lld", compute(u) - compute(l - 1));
return 0;
}