Pagini recente » Cod sursa (job #1236351) | Cod sursa (job #496884) | Cod sursa (job #80124) | Cod sursa (job #1987563) | Cod sursa (job #2849055)
#include <bits/stdc++.h>
#define nmax 1005000
#define int long long
using namespace std;
int v[nmax + 1], c[nmax + 1], cpart[nmax + 1];
map<int, int> fst, fdr;
signed main()
{
ifstream cin("secv5.in");
ofstream cout("secv5.out");
int n, l, u, p = 0, a, i, st, dr, cnt = 0;
cin >> n >> l >> u;
for (i = 1; i <= n; i++)
{
cin >> a;
if (a == v[p])
c[p]++;
else
++p, v[p] = a, c[p] = 1;
}
n = p;
for (i = 1; i <= n; i++)
cpart[i] = cpart[i - 1] + c[i];
cpart[n + 1] = cpart[n];
st = 1, dr = 1;
// fst[v[1]]++, fdr[v[1]]++;
for (i = 1; i <= n; i++)
{
while (st <= n && fst.size() < l)
fst[v[st]]++, st++;
while (dr <= n && fdr.size() < u)
fdr[v[dr]]++, dr++;
if (fdr.size() >= l && fdr.size() <= u)
cnt += max(cpart[dr] - cpart[st - 2], 1LL) * c[i];
fst[v[i]]--, fdr[v[i]]--;
if (fst[v[i]] == 0)
fst.erase(v[i]);
if (fdr[v[i]] == 0)
fdr.erase(v[i]);
}
cout << cnt;
return 0;
}