Pagini recente » Cod sursa (job #810948) | Cod sursa (job #583971) | Cod sursa (job #1376772) | Cod sursa (job #1709656) | Cod sursa (job #671818)
Cod sursa(job #671818)
# include <algorithm>
# include <cstdio>
# include <cstring>
# include <cassert>
# include <vector>
using namespace std;
# define x first
# define y second
typedef long long ll;
const char *FIN = "secv5.in", *FOU = "secv5.out";
const int MAX = (1 << 20) + 3;
char viz[MAX];
int N, L, U;
unsigned V[MAX];
vector < pair <unsigned, int> > srt;
ll sol (int lvl) {
if (lvl == 0) return 0;
memset (viz, 0, sizeof (viz));
ll SOLVE = 0;
for (int st = 0, dr = 0, solution = 0; dr < N; ++dr) {
if (viz[V[dr]] == 0) solution += 1;
for (viz[V[dr]] += 1; solution > lvl; ++st)
if (--viz[V[st]] == 0) solution -= 1;
SOLVE += dr - st + 1;
}
return SOLVE;
}
int main (void) {
assert (freopen (FIN, "r", stdin) != NULL);
assert (scanf ("%d %d %d", &N, &L, &U) == 3);
for (int i = 0; i < N; ++i) {
assert (scanf ("%u", V + i) == 1);
srt.push_back (make_pair (V[i], i));
}
sort (srt.begin (), srt.end ()); // sortam
for (int i = 0, norm = 0; i < N; V[srt[i++].y] = norm) { // normalizam
if (i > 0 && srt[i - 1].x != srt[i].x)
norm += 1;
}
fprintf (fopen (FOU, "w"), "%lld", sol (U) - sol (L - 1));
}