Cod sursa(job #1844973)

Utilizator wilson182Alexandrina Panfil wilson182 Data 10 ianuarie 2017 18:18:53
Problema Hashuri Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 kb
#include<bits/stdc++.h>
using namespace std;
struct nod{
    int val;
    nod *last, *next;
    nod(){
        last = next = NULL;
    }
};
nod *h[666020];
void add(nod* &a, int val){
    if(a == NULL){
        a = new nod;
        a->val = val;
        return;
    }
    nod* it = a;
    nod* b = new nod;
    for(; it->next; it = it->next) {
        if (it->val == val) return;
    }    
    b->last = it;
    it->next = b;
    b->val = val;
}
void remove(nod* &a, int val){
    if(a == NULL) return;
    if (a->val == val)
    {
    	
     a = a->next;
     return;
    }
    nod* it = a;
    for(; it->next; it = it->next) 
      if (it->val == val) {
        nod *u = it->last, *p=it->next;
        u->next = p;
        p->last = u;
        delete it;
        return;
      }
}
int caut(nod* &a, int val){
    nod* it = a;
    if(it == NULL) return 0;
    if(a->val == val) return 1;
    for(; it->next; it = it->next) 
      if (it->val == val) return 1;
    return 0;
}
int main(){
    freopen("hashuri.in", "r", stdin);
    freopen("hashuri.out", "w", stdout);
    int n, x, y, i;
    scanf("%d", &n);
    while(n--){
        scanf("%d%d", &x, &y);
        if(x == 1) add(h[y % 666013], y); 
        if(x == 2) remove(h[y % 666013], y); 
        if(x == 3) printf("%d\n",caut( h[y % 666013], y ));
    }
    return 0;
}