Pagini recente » Cod sursa (job #2262683) | Cod sursa (job #2393223) | Cod sursa (job #1223320) | Cod sursa (job #2290172) | Cod sursa (job #1119671)
#include <stdio.h>
#define N_MAX 1000000
#define modP 700001
#define mulQ 200003
typedef char bool;
int list[ N_MAX + 1 ], next[ N_MAX + 1 ], beg[ modP ], end[ modP ];
int sp;
inline int hash( int x ) {
return ( x * mulQ ) % modP;
}
void add( int x ) {
int h = hash( x );
if( beg[ h ] ) {
int curr = beg[ h ];
while( curr && list[ curr ] != x ) {
curr = next[ curr ];
}
if( curr == 0 ) {
list[ ++ sp ] = x;
next[ end[ h ] ] = sp;
end[ h ] = sp;
}
} else {
list[ ++ sp ] = x;
beg[ h ] = end[ h ] = sp;
}
}
void rem( int x ) {
int h = hash( x );
if( beg[ h ] ) {
int curr = beg[ h ];
if( list[ curr ] == x ) {
beg[ h ] = next[ curr ];
} else {
while( curr && list[ next[ curr ] ] != x ) {
curr = next[ curr ];
}
if( curr ) {
next[ curr ] = next[ next[ curr ] ];
}
}
}
}
bool ask( int x ) {
int h = hash( x );
if( beg[ h ] ) {
int curr = beg[ h ];
while( curr && list[ curr ] != x ) {
curr = next[ curr ];
}
if( curr ) {
return 1;
} else {
return 0;
}
} else {
return 0;
}
}
int main( ) {
FILE * fin, * fout;
fin = fopen( "hashuri.in", "r" );
fout = fopen( "hashuri.out", "w" );
int N;
fscanf( fin, "%d", &N );
int i;
for( i = 1; i <= N; i ++ ) {
int tp, x;
fscanf( fin, "%d%d", &tp, &x );
if( tp == 1 ) {
add( x );
} else if( tp == 2 ) {
rem( x );
} else {
fprintf( fout, "%d\n", ask( x ) );
}
}
fclose( fin );
fclose( fout );
}