Pagini recente » Cod sursa (job #1957539) | Cod sursa (job #1925270) | Cod sursa (job #2581263) | Cod sursa (job #1777420) | Cod sursa (job #959954)
Cod sursa(job #959954)
#include <fstream>
#include <vector>
using namespace std;
#define key 666013
#define in "secv5.in"
#define out "secv5.out"
#define xx first
#define yy second
#define N ((1 << 20) + 5)
typedef unsigned long u;
typedef pair <u, u> elem;
vector <elem> list[key];
u norm[N], c[2][N], L, U, n;
int h(u x) {
return ((x < key) ? x : x % key);
}
int search(elem x) {
int H = h(x.xx);
for (u i = 0; i < list[H].size(); ++i)
if (list[H][i].xx == x.xx)
return list[H][i].yy;
list[H].push_back (x);
return x.yy;
}
int main () {
ifstream fin (in);
fin >> n >> L >> U;
for (u i = 0; i < n; ++i) {
u x;
fin >> x;
norm[i] = search(elem(x,i));
}
u ll, uu, dl, du;
uu = ll = dl = du = 0;
u long long sol = 0;
for (u i = 0; i < n; ++i) {
while (ll < n && dl < L)
dl += !c[0][norm[ll++]]++;
while (uu < n && du + !c[1][norm[uu]] <= U)
du += !c[1][norm[uu++]]++;
if (dl >= L)
sol += (uu - ll + 1);
dl -= !--c[0][norm[i]];
du -= !--c[1][norm[i]];
}
ofstream fout (out);
fout << sol;
fout.close();
return 0;
}