Pagini recente » Cod sursa (job #109879) | Cod sursa (job #3130858) | Cod sursa (job #1684752) | Cod sursa (job #2113531) | Cod sursa (job #685587)
Cod sursa(job #685587)
#include <cstdio>
#include <algorithm>
#include <vector>
#define U unsigned
using namespace std;
const int MAX = 1 << 20;
struct per{U x, y;};
char viz[MAX];
int n, l, u;
unsigned V[MAX];
vector <per> srt;
bool Compara(per a, per b) {return a.x < b.x;}
long long Sub(int N) {
memset (viz, 0, sizeof (viz));
long long nSub = 0;
for (int i = 0, j = 0, nr = 0; j < n; j++) {
if (viz[V[j]] == 0) nr++;
for (viz[V[j]]++; nr > N; i++)
if (--viz[V[i]] == 0) nr --;
nSub += j - i + 1;
}
return nSub;
}
int main(){
freopen ("secv5.in", "r", stdin), freopen("secv5.out", "w", stdout);
scanf("%d %d %d", &n, &l, &u);
int i, norm;
for (i = 0; i < n; i++) {
scanf ("%u", &V[i]);
srt.push_back ((per){V[i], i});
}
sort (srt.begin(), srt.end(), Compara);
for (i = 0, norm = 0; i < n; V[srt[i++].y] = norm)
if (i > 0 && srt[i - 1].x != srt[i].x)
norm++;
printf ("%lld", Sub(u) - Sub(l-1));
return 0;
}