Pagini recente » Cod sursa (job #2699200) | Cod sursa (job #3316999) | Cod sursa (job #3303940) | Cod sursa (job #878999) | Cod sursa (job #3273854)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("secv5.in");
ofstream fout("secv5.out");
int n, l, u, L[1100005], U[1100005];
unsigned int a[1100005];
unsigned long long sol;
unordered_map<unsigned int, int> M;
int main()
{
int i, j, cnt;
fin >> n >> l >> u;
for(i = 1;i <= n;i++)
fin >> a[i];
j = 1;cnt = 0;
for(i = 1;i <= n;i++)
{
if(M[a[i]] == 0) cnt++;
M[a[i]]++;
while(cnt > l)
{
if(M[a[j]] == 1) cnt--;
M[a[j]]--;
j++;
}
while(cnt == l && M[a[j]] > 1)
{
M[a[j]]--;
j++;
}
if(cnt == l)
L[i] = j;
}
M.clear();
j = 1;cnt = 0;
for(i = 1;i <= n;i++)
{
if(M[a[i]] == 0) cnt++;
M[a[i]]++;
while(cnt > u)
{
if(M[a[j]] == 1) cnt--;
M[a[j]]--;
j++;
}
U[i] = j;
}
for(i = 1;i <= n;i++)
if(L[i] > 0)
sol += (L[i] - U[i] + 1);
fout << sol << "\n";
fout.close();
return 0;
}