Cod sursa(job #1196903)

Utilizator alexpetrescuAlexandru Petrescu alexpetrescu Data 9 iunie 2014 18:38:45
Problema Hashuri Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.19 kb
#include <stdio.h>
#define MAXN 1000000
#define MOD 666013
int val[MAXN], next[MAXN], lista[MOD];
inline void adauga(int p, int x){
    val[p]=x;
    next[p]=lista[x%MOD];
    lista[x%MOD]=p;
}
inline void sterge(int x){
    int p;
    p=lista[x%MOD];
    if(val[p]==x){
        lista[x%MOD]=next[lista[x%MOD]];
    }else{
        while((next[p]!=0)&&(val[next[p]]!=x)){
            p=next[p];
        }
        if(val[next[p]]==x){
            next[p]=next[next[p]];
        }
    }
}
inline int cauta(int x){
    int p, rez;
    p=lista[x%MOD];
    while((p!=0)&&(val[p]!=x)){
        p=next[p];
    }
    if(p==0){
        rez=0;
    }else{
        rez=1;
    }
    return rez;
}
int main(){
    int n, i, t, x;
    FILE *fin, *fout;
    fin=fopen("hashuri.in", "r");
    fout=fopen("hashuri.out", "w");
    fscanf(fin, "%d", &n);
    for(i=1; i<=n; i++){
        fscanf(fin, "%d%d", &t, &x);
        if(t==1){
            if(cauta(x)==0){
                adauga(i, x);
            }
        }else if(t==2){
            sterge(x);
        }else{
            fprintf(fout, "%d\n", cauta(x));
        }
    }
    fclose(fin);
    fclose(fout);
    return 0;
}