Cod sursa(job #1317596)

Utilizator retrogradLucian Bicsi retrograd Data 14 ianuarie 2015 23:49:00
Problema Hashuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.41 kb
#include<fstream>
#include<vector>
#define lld long long
#define MOD 1000000

using namespace std;
ifstream fin("hashuri.in");
ofstream fout("hashuri.out");

struct Elem {
    lld val;
    Elem *next;
    Elem(lld v) {
        val = v;
        next = NULL;
    }
};
typedef Elem* List;
typedef Elem* pnod;

List h[MOD];
pnod sf[MOD];

void add(lld x) {
    if(h[x%MOD] == NULL) {
        h[x%MOD] = new Elem(x);
        sf[x%MOD] = h[x%MOD];
        return;
    }
    for(pnod p=h[x%MOD]; p; p=p->next) {
        if(p->val == x) return;
    }
    sf[x%MOD]->next = new Elem(x);
    sf[x%MOD] = sf[x%MOD] -> next;
}

void del(lld x) {
    pnod last;
    if(h[x%MOD] == NULL) return;
    if(h[x%MOD] -> val == x) {
        pnod p = h[x%MOD];
        h[x%MOD] = h[x%MOD] -> next;
        delete p;
        return;
    }
    for(pnod p=h[x%MOD]; p; last = p, p=p->next) {
        if(p->val == x) {
            last->next = p->next;
            delete p;
            return;
        }
    }
}

bool check(lld x) {
    for(pnod p=h[x%MOD]; p; p=p->next) {
        if(p->val == x) return true;
    }
    return false;
}

int main() {
    int q, type;
    fin>>q;
    lld x;
    while(q--) {
        fin>>type>>x;
        switch(type) {
            case 1: add(x);break;
            case 2: del(x); break;
            case 3: fout<<check(x)<<'\n'; break;
        }
    }
}