Pagini recente » Cod sursa (job #2319258) | Cod sursa (job #1318911) | Cod sursa (job #3248565) | Cod sursa (job #1039506) | Cod sursa (job #2647308)
#include <bits/stdc++.h>
#define int unsigned long long
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);
}
};
unordered_map <int, int, custom_hash> Hash;
int *v, n, l, u;
int go (int x) {
Hash.clear();
int ans = 0;
int poz = 1, it;
for (it = 1; it <= n; it++) {
++Hash[v[it]];
while (Hash.size() > x) {
if (--Hash[v[poz]] == 0)
Hash.erase(v[poz]);
poz++;
}
ans += it - poz + 1;
}
return ans;
}
signed 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 = new (nothrow) int[n + 1];
int i;
for (i = 1; i <= n; i++)
cin >> v[i];
cout << go(u) - go(l - 1);
return 0;
}