Cod sursa(job #1237455)

Utilizator alex.glontGlontaru Alexandru alex.glont Data 4 octombrie 2014 10:09:14
Problema Hashuri Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <iostream>
#include <fstream>

#define R 9973
#define M 1000000
using namespace std;

fstream in ( "hashuri.in" , ios::in ),
        out( "hashuri.out", ios::out);

int lst[R], val[M], urm[M], m;



bool apartine(int x){
    int p = lst[x%R];

    while( p!= -1 ){

        if( val[p] == x );
            return true;

        p = urm[p];
    }

    return false;
}


void adauga( int x ){

    int r = x % R;

    if( apartine( x ) ) return;

    val[m]  = x;
    urm[m++]= lst[ r ];
    lst[ r ] = m-1;
}

void sterge( int x){

    int r = x%R, p = lst[r];

    if( x == val[p] )
        lst[ r ] = urm[ p ];

    while( urm[p] != -1 ){

        if( val[urm[p]] == x ){

            urm[p] = urm[urm[p]];
        }

        p=urm[p];
    }
}


int main(){

    int n, a, b;

    in >> n;

    for(int i=0; i<R; i++){

        lst[i] = -1;
    }
    for(int i=0; i<n; i++){

        urm[i] = -1;
    }

    for(int i=0; i<n; i++ ){

        in >> a >> b;

        if( a==1 ) adauga( b );
        if( a==2 ) sterge( b );
        if( a==3 ) out << apartine( b ) <<'\n';
    }

    return 0;
}