Cod sursa(job #2647304)

Utilizator CONFUSION@@@@@ @@@ CONFUSION Data 3 septembrie 2020 21:00:53
Problema Secventa 5 Scor 0
Compilator cpp-64 Status done
Runda Teme Pregatire ACM Unibuc 2014, Anul I Marime 1.16 kb
#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;
}