Pagini recente » Cod sursa (job #746553) | Cod sursa (job #626891) | Cod sursa (job #2306819) | Cod sursa (job #1226533) | Cod sursa (job #858075)
Cod sursa(job #858075)
#include<iostream>
#include<vector>
#include<algorithm>
#include<cstdio>
using namespace std;
const int N = 1000100;
int n, l, u, no, norm[N], x[N], p[N], nr[N];
char s[30];
long long secv(int dim) {
int i, st, dr;
if(!dim)
return 0;
long long sol = 0;
int nu = 0;
for(i = 1; i<=n; ++i)
nr[i] = 0;
for(st = 1, dr = 1; dr <= n; ++dr) {
if(!nr[norm[dr]])
nu++;
nr[norm[dr]]++;
while(nu > dim) {
--nr[norm[st]];
if(!nr[norm[st]])
nu--;
st++;
}
sol += dr - st + 1;
}
return sol;
}
bool cmp(int a, int b) {
return x[a] < x[b];
}
int main() {
int i;
freopen("secv5.in", "r", stdin);
freopen("secv5.out", "w", stdout);
cin >> n >> l >> u;
cin.get();
for(i = 1; i <= n; ++i) {
gets(s);
int pp = 0, r = 0;
while(s[pp] >= '0' && s[pp] <= '9')
r = r * 10 + s[pp++] - '0';
x[i] = r;
p[i] = i;
}
sort(p + 1, p + n + 1, cmp);
for(i = 1; i <= n; ++i)
if (i == 1 || x[p[i]] != x[p[i - 1]])
norm[p[i]] = ++no;
else
norm[p[i]] = no;
cout << secv(u) - secv(l-1) << '\n';
return 0;
}