Pagini recente » Cod sursa (job #1996071) | Cod sursa (job #1473061) | Cod sursa (job #2409397) | Istoria paginii runda/yager | Cod sursa (job #1751050)
#include <cstdio>
#include <vector>
using namespace std;
#define NMAX 100003
vector < int > v[ NMAX ];
vector < int > g[ NMAX ];
int firstKey( int x );
int secondKey( int x );
void add( int x );
void sterge( int x );
bool cauta( int x );
int main()
{
freopen("hashuri.in","r",stdin);
freopen("hashuri.out","w",stdout);
int n, m, i, j, s, t, d, x, y;
scanf("%d",&n);
while( n-- ){
scanf("%d%d",&x,&y);
if( x == 1 ) add( y );
if( x == 2 ) sterge( y );
if( x == 3 ) printf("%d\n",cauta( y ));
}
return 0;
}
void add( int x ){
if( cauta( x ) ) return ;
int key1 = firstKey( x );
int key2 = secondKey( x );
if( v[ key1 ].size() < g[ key2 ].size() ) v[ key1 ].push_back( x );
else g[ key2 ].push_back( x );
}
void sterge( int x ){
int key1 = firstKey( x );
int key2 = secondKey( x );
int i, j;
for( i = 0; i < v[ key1 ].size(); ++i ){
if( v[ key1 ][ i ] == x ){
v[ key1 ].erase( v[ key1 ].begin() + i );
return ;
}
}
for( i = 0; i < g[ key2 ].size(); ++i ){
if( g[ key2 ][ i ] == x ){
g[ key2 ].erase( g[ key2 ].begin() + i, g[ key2 ].begin() + i );
return ;
}
}
}
bool cauta( int x ){
int key1 = firstKey( x );
int key2 = secondKey( x );
int i, j;
for( i = 0; i < v[ key1 ].size(); ++i )
if( v[ key1 ][ i ] == x ) return 1;
for( i = 0; i < g[ key2 ].size(); ++i )
if( g[ key2 ][ i ] == x ) return 1;
return 0;
}
int firstKey( int x ){ return ( x % NMAX ); }
int secondKey( int x ){ return ( x % NMAX + 38953 - x % 38953 ) % NMAX; }