Pagini recente » Cod sursa (job #183129) | Monitorul de evaluare | Cod sursa (job #228239) | Cod sursa (job #3133663) | Cod sursa (job #2540645)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("secv5.in");
ofstream fout ("secv5.out");
unsigned int a[1050000]; /// a[(1<<20) + 3]
int n, L, U;
/// ret. numarul de secvente care au cel mult X
/// elemente distincte
long long NrSecv(int X)
{
unordered_map<unsigned int, int> M;
int i, j, nrD = 0;
long long sol = 0;
j = 1;
for (i = 1; i <= n; i++)
{
M[a[i]]++;
if (M[a[i]] == 1) nrD++;
while (nrD > X)
{
M[a[j]]--;
if (M[a[j]] == 0) nrD--;
j++;
}
sol = sol + (i - j + 1);
}
return sol;
}
int main()
{
int i;
long long cnt;
fin >> n >> L >> U;
for (i = 1; i <= n; i++)
fin >> a[i];
cnt = NrSecv(U) - NrSecv(L - 1);
fout << cnt;
return 0;
}