Pagini recente » Cod sursa (job #1362583) | Cod sursa (job #1146164) | Romanii medaliati la IOI | Cod sursa (job #2279284) | Cod sursa (job #2881424)
#include <cstdio>
#include <iostream>
#include <vector>
#include <string.h>
#include <map>
#include <algorithm>
using namespace std;
const int nmax = 1 << 20;
int n, l, u, i, j, k;
unsigned x[nmax];
vector <pair<unsigned, int>> lista;
char a[nmax];
long long f(int k){
int l, r, y = 0;
long long nr = 0;
if (k == 0)
return 0;
memset(a, 0, sizeof(a));
for (l = r = 0; r < n; r++){
if (!a[x[r]]){
y++;
}
a[x[r]]++;
for (int b=0; y > k; l++){
a[x[l]]--;
if (!a[x[l]])
y--;
}
nr += r - l + 1;
}
return nr;
}
int solve(int u, int l){
return f(u) - f(l-1);
}
int main(){
freopen("secv5.in", "r", stdin);
freopen("secv5.out", "w", stdout);
scanf("%d %d %d", &n, &l, &u);
for (i = 0; i < n; i++){
scanf("%u", x+i);
lista.push_back(make_pair(x[i], i));
}
sort(lista.begin(), lista.end());
for (i = 0, j = 0; i < n; ++i){
if (i > 0 && lista[i].first != lista[i - 1].first)
j++;
x[lista[i].second] = j;
}
printf("%lld", solve(u,l));
return 0;
}