Pagini recente » Cod sursa (job #1324334) | Cod sursa (job #2481102) | Cod sursa (job #188786) | Cod sursa (job #2424456) | Cod sursa (job #2647304)
#include <bits/stdc++.h>
using namespace std;
struct custom_hash {
static uint64_t splitmix64 (uint64_t x) {
x += 0x9e3779b97f4a7c15;
x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9;
x = (x ^ (x >> 27)) * 0x94d049bb133111eb;
return x ^ (x >> 31);
}
size_t operator () (uint64_t x) const {
static const uint64_t FIXED_RANDOM = chrono::steady_clock::now().time_since_epoch().count();
return splitmix64(x + FIXED_RANDOM);
}
};
vector <int> v;
unordered_map <int, bool, custom_hash> Hash;
unsigned long long ans;
int n, l, u;
void go (int x) {
Hash.clear();
int i;
for (i = x; i < x + l - 1; i++)
Hash[v[i]];
while (i < n && Hash.size() <= u) {
Hash[v[i]];
if (Hash.size() >= l) {
++ans;
}
i++;
}
}
int main () {
freopen("secv5.in", "r", stdin);
freopen("secv5.out", "w", stdout);
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
cin >> n >> l >> u;
v.resize(n);
for (auto &it: v)
cin >> it;
int i;
for (i = 0; i < n - l; i++)
go(i);
cout << ans;
return 0;
}