Pagini recente » Cod sursa (job #122938) | Monitorul de evaluare | Monitorul de evaluare | Statistici Condrea Andrei (mist3rfi3ld) | Cod sursa (job #2469740)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("secv5.in");
ofstream fout("secv5.out");
int n, l, u;
long long fr[(1 << 20) + 5];
long long v[(1 << 20) + 5], v2[(1 << 20) + 5];
unordered_map < long long, long long > M;
long long secv(int lung)
{
long long ans = 0;
int i = 1, j = 1, sizes = 0;
for(i = 1; i <= n; i++)
{
for(; j <= n && sizes <= lung; j++)
{
if(fr[v[j]] == 0 && sizes == lung)break;
if(fr[v[j]] == 0) sizes++;
fr[v[j]]++;
}
ans += j - i;
fr[v[i]]--;
if(fr[v[i]] == 0)sizes--;
}
return ans;
}
int main()
{
fin >> n >> l >> u;
for(int i = 1; i <= n; i++)
{
fin >> v[i];
v2[i] = v[i];
}
sort(v2 + 1, v2 + n + 1);
int p = 0;
for(int i = 1; i <= n; i++)
{
if(v2[i] != v2[i - 1]) p++;
M[v2[i]] = p;
}
for(int i = 1; i <= n; i++)
v[i] = M[v[i]];
fout << secv(u) - secv(l - 1);
return 0;
}