Cod sursa(job #1190390)

Utilizator hrazvanHarsan Razvan hrazvan Data 25 mai 2014 11:38:15
Problema Hashuri Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.44 kb
#include <stdio.h>
#define MOD 1914354
#define N_MAX 1000000
typedef struct{
    int nr, next, prev;
}hash;

hash h[ N_MAX + 1 ];
int ult[ MOD ], dr = 1;

int caut ( int x ){
    int poz = ult[ x % MOD ];
    while ( poz > 0 && h[ poz ] . nr != x ){
        poz = h[ poz ] . next;
    }
    if ( poz == 0 ) return -1;
    return poz;
}

int main()
{
    FILE *in = fopen ( "hashuri.in", "r" );
    FILE *out = fopen ( "hashuri.out", "w" );
    int n;
    fscanf ( in, "%d", &n );
    int i, tip, x, poz;
    for ( i = 0; i < n; i++ ){
        fscanf ( in, "%d%d", &tip, &x );
        if ( tip == 1 ){
            poz = caut ( x );
            if ( poz == -1 ){
                h[ dr ] . nr = x;
                h[ dr ] . next = ult[ x % MOD ];
                h[ h[ dr ] . next ] . prev = dr;
                ult[ x % MOD ] = dr;
                dr++;
            }
        }
        else  if ( tip == 2 ){
            poz = caut ( x );
            if ( poz != -1 ){
                if ( ult[ x % MOD ] == poz )    ult[ x % MOD ] = h[ poz ] . next;
                h[ h[ poz ] . prev ] . next = h[ poz ] . next;
                h[ h[ poz ] . next ] . prev = h[ poz ] . prev;
            }
        }
        else{
            poz = caut ( x );
            if ( poz == -1 )  fprintf ( out, "0\n" );
            else              fprintf ( out, "1\n" );
        }
    }
    fclose ( in );
    fclose ( out );
    return 0;
}