Pagini recente » Cod sursa (job #1303068) | Cod sursa (job #936849) | Cod sursa (job #444145) | Cod sursa (job #79747) | Cod sursa (job #2799265)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("secv5.in");
ofstream fout("secv5.out");
int n, st, dr, nrdist[1048580];
long long a[1048580];
unordered_map<long long, int> M;
/// <summary>
/// 10 3 4
/// j
/// 6 6 6 7 9 13 13 14 15 15
/// i
///
/// nrdist
/// 1 2 3 4 5 6 7 8 9 10
/// 1 1 1 2 3 4 4 5 6 0
/// k
/// nrd = 4
/// cnt = 3+4+4+2+3+3 = 19
/// (k - i)
/// </summary>
/// <returns></returns>
void Citire()
{
int i;
fin >> n >> st >> dr;
for (i = 1; i <= n; i++)
fin >> a[i];
}
void Rezolvare()
{
int i, j, nrd = 0, k = 1;
long long cnt = 0;
i = 1;
for (j = 1; j <= n; j++)
{
M[a[j]]++;
if (M[a[j]] == 1) nrd++;
nrdist[j] = nrdist[j - 1] + (M[a[j]] == 1);
while (nrd > dr)
{
M[a[i]]--;
if (M[a[i]] == 0) nrd--;
i++;
}
if (nrd >= st)
{
while (nrdist[j] - nrdist[k] + 1 >= st)
k++;
cnt += (k - i);
}
}
fout << cnt << "\n";
}
int main()
{
Citire();
Rezolvare();
fout.close();
return 0;
}