Cod sursa(job #712044)

Utilizator sana1987Laurentiu Dascalu sana1987 Data 12 martie 2012 23:30:13
Problema Hashuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.3 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <vector>

using namespace std;

int N, n, c;

vector<int> hashtable[666013];

inline vector<int>::iterator find_value(int x) {
    int list = x % 666013;
    vector<int>::iterator it;
    for (it = hashtable[list].begin(); it != hashtable[list].end(); ++it)
    if (*it == x)
        return it;
    return hashtable[list].end();
}

inline void hash_insert(int n) {
    int list = n % 666013;   
    if (find_value(n) == hashtable[list].end())
        hashtable[list].push_back(n);
    }

inline void hash_delete(int n) {
    int list = n % 666013;
    vector<int>::iterator it = find_value(n);
    if (it != hashtable[list].end())
        hashtable[list].erase(it);
}

inline int hash_exists(int n) {
    int list = n % 666013;
    return find_value(n) != hashtable[list].end();
}

int main(int argc, char **argv) {
    freopen("hashuri.in", "r", stdin);
    freopen("hashuri.out", "w", stdout);

    memset(hashtable, 0, sizeof(hashtable));;
    
    scanf("%d", &N);
    int i;

    for (i = 0; i < N; i++) {
        scanf("%d %d", &c, &n);
        if (c == 1) {
            hash_insert(n);
        }
        else if (c == 2) {
            hash_delete(n);
        }
        else {
            printf("%d\n", hash_exists(n));
        }

    }
    
	return 0;
}