Pagini recente » Cod sursa (job #3124853) | Cod sursa (job #246046) | Cod sursa (job #1213425) | Cod sursa (job #951343) | Cod sursa (job #2956369)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("secv5.in");
ofstream fout("secv5.out");
int t[1100001], n, v[1100001], k, L, U, last[1100001];
void add(int poz, int val)
{
for (int i = poz; i <= n; i += (i & (-i)))
t[i] += val;
}
int get(int poz)
{
int sum = 0;
for (int i = poz; i; i -= (i & (-i)))
sum += t[i];
return sum;
}
int cb(int val)
{
int l = 1, r = k;
while (l <= r)
{
int m = ((l + r) >> 1);
if (v[m] == val)
return m;
if (v[m] < val)
l = m + 1;
else
r = m - 1;
}
return 0; // unreachable
}
int main() {
fin >> n >> L >> U;
for (int i = 1; i <= n; i++)
fin >> v[i];
sort(v + 1, v + n + 1);
k = 0;
int i = 1;
while (i <= n)
{
v[++k] = v[i++];
while (i <= n && v[i] == v[k])
i++;
}
fin.close();
fin.open("number.in");
fin >> n >> L >> U;
long long cnt = 0;
for (int i = 1; i <= n; i++)
{
int x;
fin >> x;
x = cb(x);
if (!last[x])
add(i, 1), last[x] = i;
else
{
add(last[x], -1);
add(i, 1);
last[x] = i;
}
int poz1 = 0, poz2 = 0;
int l = 1, r = i;
while (l <= r)
{
int m = ((l + r) >> 1);
if (get(i) - get(m - 1) < L)
r = m - 1;
else
{
poz1 = m;
l = m + 1;
}
}
if (!poz1)
continue;
l = 1, r = i;
while (l <= r)
{
int m = ((l + r) >> 1);
if (get(i) - get(m - 1) > U)
l = m + 1;
else
{
poz2 = m;
r = m - 1;
}
}
if (!poz2)
continue;
if (poz2 <= poz1)
cnt += poz1 - poz2 + 1;
}
fout << cnt;
return 0;
}