Pagini recente » Cod sursa (job #3345195) | Monitorul de evaluare | Cod sursa (job #3330736) | Cod sursa (job #3332676) | Cod sursa (job #3324861)
#include <bits/stdc++.h>
using namespace std;
#ifdef LOCAL
ifstream fin("input.txt");
#define fout cout
#else
ifstream fin("secv5.in");
ofstream fout("secv5.out");
#endif
using ll = long long;
const int NMAX = 1e6+5;
int n, l, u;
int a[NMAX];
int fr[NMAX];
void read() {
fin >> n >> l >> u;
for (int i = 1; i <= n; i++) {
fin >> a[i];
}
}
void normalize() {
vector<int> v;
for (int i = 1; i <= n; i++) {
v.push_back(i);
}
sort(v.begin(), v.end(), [&](int i, int j) {
return a[i] < a[j];
});
int max_val = 1;
int last_val = a[v[0]];
a[v[0]] = 1;
for (int i = 1; i < n; i++) {
if (last_val != a[v[i]]) {
last_val = a[v[i]];
max_val++;
}
a[v[i]] = max_val;
}
}
ll solve(int max_cnt) {
if (max_cnt == 0) return 0;
fill(fr, fr + n + 1, 0);
ll ans = 0;
int r = 0, cnt = 0;
for (int l = 1; l <= n; l++) {
while (r <= n && cnt <= max_cnt) {
r++;
fr[a[r]]++;
if (fr[a[r]] == 1) {
cnt++;
}
}
ans += (r - 1) - l + 1;
fr[a[l]]--;
if (fr[a[l]] == 0) {
cnt--;
}
}
return ans;
}
signed main() {
read();
normalize();
fout << solve(u) - solve(l - 1);
return 0;
}