Pagini recente » Cod sursa (job #224845) | Cod sursa (job #2107870) | Cod sursa (job #2889397) | Cod sursa (job #139466) | Cod sursa (job #1459532)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <cstring>
#define MAXN (1 << 20) + 1
#define MOD 666013
#define list (x % MOD)
using namespace std;
unsigned int N, no, j, l, u, L[MAXN], used[MAXN], A[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 int compute(unsigned int c){
memset(used, 0, (N + 1) * sizeof (unsigned int));
unsigned int now = 0, ans = 0;
A[0]= j = 1;
for (unsigned int i = 1; i <= N; ++i){
if (used[L[i]] >= j || now < c) {
if (used[L[i]] < j) ++now;
used[L[i]] = i, A[i] = A[i - 1];
}
else {
for (; used[L[j]] != j; ++j);
A[i] = ++j;
used[L[i]] = i;
}
ans += i - A[i] + 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("%d", &x),
L[i] = insert_val(x);
printf("%u\n", compute(u) - compute(l - 1));
return 0;
}