Pagini recente » Cod sursa (job #2732131) | Cod sursa (job #2937595) | Cod sursa (job #1786653) | Cod sursa (job #2022876) | Cod sursa (job #2450566)
#include <fstream>
#include <algorithm>
#include <cstring>
#include <unordered_map>
#define ll unsigned int
#define MOD 666013
using namespace std;
ifstream f("secv5.in");
ofstream g("secv5.out");
int n, r,l;
ll fr[(1<<20) + 2];
ll v[(1 << 20) + 1],v2[(1 << 20) + 1], hash_size;
unordered_map <ll,ll> norm;
long long secv(int lungime)
{
long long sol = 0;
memset(fr, 0, sizeof(fr));
int i = 1, j = 1, sizes = 0;
while(i <= n)
{
while(j <= n && sizes <= lungime)
{
if(fr[v[j]] == 0 && sizes == lungime)
break;
if(fr[v[j]] == 0)
sizes++;
fr[v[j]]++;
j++;
}
sol += j - i;
fr[v[i]]--;
if(fr[v[i]] == 0)
sizes--;
i++;
}
return sol;
}
int main()
{
f >> n >> l >> r;
for(int i = 1; i <= n; ++i)
{
f >> 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++;
norm[v2[i]] = p;
}
for(int i = 1; i <= n; ++i)
v[i] = norm[v[i]];
g << secv(r) - secv(l - 1);
return 0;
}