Pagini recente » Borderou de evaluare (job #2580844) | Borderou de evaluare (job #1347417) | Borderou de evaluare (job #1501918) | Borderou de evaluare (job #1058293) | Cod sursa (job #2809256)
#include <iostream>
#include <fstream>
#include <cstring>
#include <unordered_map>
using namespace std;
ifstream fin("secv5.in");
ofstream fout("secv5.out");
#pragma GCC optimize ("Ofast")
const long long maxN = (1 << 20) + 5;
long long v[maxN], ans;
long long n, l, u, vf[maxN], poz;
unordered_map <long long, long long> Hash;
long long calc(long long x)
{
long long nr_sol = 0;
memset(vf, 0, sizeof vf);
long long cnt = 0, j = 1;
for(long long i = 1; i <= n; i++)
{
if(vf[v[i]] == 0)
cnt++;
vf[v[i]]++;
while(cnt > x)
{
vf[v[j]]--;
if(vf[v[j]] == 0)
cnt--;
j++;
}
nr_sol += 1LL*(i - j + 1);
}
return nr_sol;
}
int main()
{
fin >> n >> l >> u;
for(long long i = 1; i <= n; i++)
{
fin >> v[i];
if(!Hash[v[i]])
{
poz++;
Hash[v[i]] = poz;
}
v[i] = Hash[v[i]];
}
long long ans = calc(u) - calc(l - 1);
fout << ans;
return 0;
}