Cod sursa(job #2884397)

Utilizator VartonVarts Var Varton Data 3 aprilie 2022 12:13:42
Problema Secventa 5 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <iostream>
#include <bits/stdc++.h>
#include <fstream>
#include <map>

using namespace std;
ifstream in("secv5.in");
ofstream out("secv5.out");
const static long mod = 66013;
vector<vector<int>> v;
int dim=0;
int search(int value) {
    int key = value % mod;
    for (int i = 0; i < v[key].size(); ++i)
        if (v[key][i] == value)
            return i;
    return -1;
}

void insert(int value) {
    if(search(value) == -1) dim++;
    v[value % mod].push_back(value);
}

void erase(int value) {
    int key = value % mod;
    int s = v[key].size() - 1;
    int ind = search(value);
    if (ind != -1) {
//        v[key][ind] = v[key][s];
        v[key].pop_back();
    }
    if(search(value) == -1) dim--;
}


int main() {
    v.resize(mod);
    vector<int> v1;
    int l, u, n;
    int x;
    in >> n;
    in >> l >> u;
    for (int i = 0; i < n; i++) {
        in >> x;
        v1.push_back(x);
    }
    int s = 0, cntU = 0, cntL = 0;

    for (int i = 0; i < n; i++) {
        insert(v1[i]);
        while (dim > u) {
            erase(v1[s++]);
        }

        cntU += (i - s + 1);
    }
    s = 0;

    v.clear();
    v.resize(mod);
    dim = 0 ;
    for (int i = 0; i < n; i++) {
        insert(v1[i]);
        while (dim >= l)
            erase(v1[s++]);
        cntL += (i - s + 1);
    }
    out << cntU - cntL;
    return 0;
}