Pagini recente » Cod sursa (job #293211) | Cod sursa (job #2583392) | Cod sursa (job #628691) | Cod sursa (job #1401685) | Cod sursa (job #2906991)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("secv5.in");
ofstream fout("secv5.out");
int n, u, l;
int ap[(1<<20) + 1], id[(1<<20) + 1];
unsigned int x[(1<<20) + 1], y[(1<<20) + 1];
long long secv(int k)
{
for(int i = 1; i <= n; ++i)
ap[i] = 0;
long long st = 1, cnt = 0, sz = 0;
for(int dr = 1; dr <= n; ++dr)
{
if(!ap[y[dr]])
++sz;
++ap[y[dr]];
while(sz > k)
{
--ap[y[st]];
if(ap[y[st]] == 0)
--sz;
++st;
}
cnt += dr - st + 1;
}
return cnt;
}
bool cmp(int a, int b)
{
return x[a] < x[b];
}
int main() {
fin >> n >> l >> u;
for (int i = 1; i <= n; ++i) {
fin >> x[i];
id[i] = i;
}
fin.close();
sort(id + 1, id + n, cmp);
for (int i = 1; i <= n; ++i){
if (i > 1 && x[id[i]] == x[id[i - 1]])
y[id[i]] = y[id[i - 1]];
else
y[id[i]] = i;
}
fout << secv(u) - secv(l - 1);
fout.close();
return 0;
}