Pagini recente » Cod sursa (job #1317781) | Cod sursa (job #1551122) | Cod sursa (job #2064519) | Cod sursa (job #3183047) | Cod sursa (job #1437314)
#include <iostream>
#include <fstream>
#include <unordered_map>
#define Nmax 2000000
std::ifstream in("secv5.in");
std::ofstream out("secv5.out");
unsigned A[Nmax], N;
int getResult(int K) {
int cnt = 0, total = 0, left = 1, right = 1;
std::unordered_map<unsigned, unsigned> MAP;
while (1) {
if (MAP.find(A[right]) == MAP.end()) {
MAP[A[right]] = 1;
cnt++;
} else MAP[A[right]]++;
while (cnt == K + 1) {
if (MAP[A[left]] == 1) {
MAP.erase(A[left]);
cnt--;
} else MAP[A[left]]--;
left++;
}
total += (right - left+ 1);
right++;
if (right == N + 1) break;
}
return total;
}
int main() {
int L, U;
in >> N >> L >> U;
for (int i = 1; i <= N; i++)
in >> A[i];
out << getResult(U) - getResult(L - 1) << "\n";
//std::cout << getResult(U) - getResult(L - 1) << "\n";
}