Pagini recente » Cod sursa (job #3356465) | Borderou de evaluare (job #3327521) | Cod sursa (job #3338262) | Cod sursa (job #3342233) | Cod sursa (job #3351886)
#include <fstream>
#include <unordered_map>
using namespace std;
const int NMAX = 1048584;
int n, L, U;
unsigned int a[NMAX];
int b[NMAX];
int frU[NMAX], frL[NMAX];
void normalize() {
std::unordered_map<unsigned int, int> mapping;
int next_id = 1;
for (int i = 1; i <= n; i++) {
if (mapping.find(a[i]) == mapping.end()) {
mapping[a[i]] = next_id++;
}
b[i] = mapping[a[i]];
}
mapping.clear();
}
int main() {
ifstream fin("secv5.in");
ofstream fout("secv5.out");
fin >> n >> L >> U;
for (int i = 1; i <= n; i++) fin >> a[i];
normalize();
long long total = 0;
int stU = 1, stL = 1;
int distU = 0, distL = 0;
for (int dr = 1; dr <= n; dr++) {
if (frU[b[dr]] == 0) distU++;
frU[b[dr]]++;
while (distU > U) {
frU[b[stU]]--;
if (frU[b[stU]] == 0) distU--;
stU++;
}
if (frL[b[dr]] == 0) distL++;
frL[b[dr]]++;
while (distL > L - 1) {
frL[b[stL]]--;
if (frL[b[stL]] == 0) distL--;
stL++;
}
if (distU >= L) {
total += (stL - stU);
}
}
fout << total << "\n";
return 0;
}