Pagini recente » Cod sursa (job #288252) | Cod sursa (job #410235) | Cod sursa (job #1378828) | Cod sursa (job #2630013) | Cod sursa (job #2877097)
#include <fstream>
#include <algorithm>
using namespace std;
const int NMAX = (1 << 20);
int N, L, U;
unsigned int v[NMAX];
pair <unsigned int, unsigned int> a[NMAX];
int freq[NMAX + 5];
long long Solve(const int &K) {
for (int i = 1; i <= NMAX; ++i) {
freq[i] = 0;
}
int sz = 0;
long long cnt = 0;
for (int i = 0, j = 0; i < N; ++i) {
freq[v[i]] += 1;
if (freq[v[i]] == 1) {
++sz;
}
while (sz > K) {
freq[v[j]]--;
if (freq[v[j]] == 0) {
--sz;
}
++j;
}
cnt = 1LL * cnt + (i - j + 1);
}
return cnt;
}
int main() {
ifstream fin("secv5.in");
ofstream fout("secv5.out");
fin >> N >> L >> U;
for (int i = 0; i < N; ++i) {
fin >> a[i].first;
a[i].second = i;
}
sort(a, a + N);
int val = 0;
for (int i = 0; i < N; ++i) {
if (a[i].first != a[i - 1].first) {
val++;
}
v[a[i].second] = val;
}
fout << Solve(U) - Solve(L - 1) << "\n";
fin.close();
fout.close();
return 0;
}