Cod sursa(job #2877077)

Utilizator GhiciCineRazvan Dumitriu GhiciCine Data 24 martie 2022 09:18:27
Problema Secventa 5 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <iostream>
#include <fstream>
#include <unordered_map>
#define N (1<<20) + 1
#define uint unsigned int

using namespace std;
unordered_map<uint, uint> mp;

uint n, v[N], f[N];

ifstream fin("secv5.in");
ofstream fout("secv5.out");

uint sol(uint x) {
    if(x == 0) return 0;

    memset(f, 0, sizeof(f));
    uint cnt = 0, dist = 0, i, j;

    i = 0;
    for(j = 0; j < n; j++) {
        if(f[v[j]] == 0)
            dist++;
        f[v[j]]++;
        if(dist > x) {
            while(dist > x) {
                f[v[i]]--;
                if(f[v[i]] == 0)
                    dist--;
                i++;
            }
        }
        cnt = cnt + j - i + 1;
    }
    return cnt;
}

int main() {
    uint l, u, cnt;

    fin >> n >> l >> u;
    cnt = 0;
    for(uint i = 0; i < n; i++) {
        fin >> v[i];
        if(mp[v[i]] == 0) {
            cnt++;
            mp[v[i]] = cnt;
            v[i] = cnt;
        } else {
            v[i] = mp[v[i]];
        }
    }
    fout << sol(u) - sol(l - 1) << endl;
    return 0;
}