Pagini recente » Cod sursa (job #3266070) | Cod sursa (job #1019753) | Cod sursa (job #1906362) | Cod sursa (job #1997581) | Cod sursa (job #2439681)
#include <bits/stdc++.h>
#define ll long long
using namespace std;
#define cin fi
#define cout fo
ifstream fi("secv5.in");
ofstream fo("secv5.out");
const int NMAX = 1100000;
int n, l, u;
ll x[NMAX], y[NMAX];
map <ll, int> M;
int k;
int dp[NMAX], f[NMAX];
void normalizare()
{
for (int i = 1; i <= n; i++)
y[i] = x[i];
sort(y + 1, y + n + 1);
for (int i = 1; i <= n; i++)
if (y[i] != y[i - 1])
M[y[i]] = ++k;
for (int i = 1; i <= n; i++)
x[i] = M[x[i]];
}
long long nrSubsecventeMaximXDistincte(int nr)
{
if (nr == 0)
return 0;
memset(dp, 0, sizeof(dp));
memset(f, 0, sizeof(f));
int total = 0;
dp[1] = 1;
f[x[1]] = 1;
total++;
for (int i = 2; i <= n; i++)
{
if (!f[x[i]])
total++;
f[x[i]]++;
dp[i] = dp[i - 1];
while (total > nr)
{
f[x[dp[i]]]--;
if (!f[x[dp[i]]])
total--;
dp[i]++;
}
}
long long ret = 0;
for (int i = 1; i <= n; i++)
ret += i - dp[i] + 1;
return ret;
}
signed main()
{
cin >> n >> l >> u;
for (int i = 1; i <= n; i++)
cin >> x[i];
normalizare();
cout << nrSubsecventeMaximXDistincte(u) - nrSubsecventeMaximXDistincte(l - 1);
return 0;
}