Cod sursa(job #2293864)

Utilizator CristyXtremeSimion Cristian CristyXtreme Data 1 decembrie 2018 17:39:35
Problema Hashuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include <stdio.h>
#include <vector>

using namespace std;

vector <int> numere[735337];

int h(int val) {
    return val % 735337;
}

void interschimba(int &a, int &b) {
    int aux = a;
    a = b;
    b = aux;
}

int cauta(int val) {
    int cod = h(val);
    for (int i = 0; i < numere[cod].size(); i++)
        if (numere[cod][i] == val)
            return i;
    return -1;
}

void insereaza(int val) {
    int cod = h(val);
    if (cauta(val) == -1)
        numere[cod].push_back(val);
}

void sterge(int val) {
    int cod = h(val), poz = cauta(val);
    // la stergere se interschimba elementul de pe pozitia gasita cu ultimul element, apoi se da pop
    if (poz >= 0) {
        interschimba(numere[cod][poz], numere[cod].back());
        numere[cod].pop_back();
    }
}

int main() {
	freopen("hashuri.in", "r", stdin);
	freopen("hashuri.out", "w", stdout);
	int n, op, x;
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
        scanf("%d %d", &op, &x);
        if (op == 1)
            insereaza(x);
        if (op == 2)
            sterge(x);
        if (op == 3)
            if (cauta(x) == -1)
                printf("0\n");
            else
                printf("1\n");
    }
	return 0;
}