Pagini recente » Cod sursa (job #671524) | Cod sursa (job #2153768) | Cod sursa (job #2933463) | Cod sursa (job #17430) | Cod sursa (job #1805364)
#include <cstdio>
#include <vector>
using namespace std;
#define MOD 100003
vector < int > v[ MOD + 10 ];
int key;
void add( int x);
void sterge( int x );
vector<int>::iterator cauta( int x );
int putere ( long long p, long long n ) {
long long x = 1;
while(p){
if(p%2){
x %= MOD;
x=(x*n)%MOD;
p--;
} else{
n %= MOD;
n=(n*n)%MOD;
p/=2;
}
}
return x % MOD;
}
int hash32shift (int kk) {
kk %= MOD;
return putere( kk, kk ) % MOD;
}
int main()
{
freopen("hashuri.in","r",stdin);
freopen("hashuri.out","w",stdout);
int n, i, j, x, y;
scanf("%d",&n);
while( n-- ){
scanf("%d%d",&x,&y);
key = hash32shift( y );
if( x == 1 ) add( y );
else if( x == 2 ) sterge( y );
else printf( "%d\n",cauta( y ) != v[ key ].end() );
}
return 0;
}
vector<int>::iterator cauta( int x )
{
vector<int>::iterator it;
for( it = v[ key ].begin(); it != v[ key ].end(); ++it)
if ( *it == x )
return it;
return v[ key ].end();
}
void add( int x )
{
if( cauta( x ) == v[ key ].end())
v[ key ].push_back( x );
}
void sterge( int x )
{
vector<int>::iterator it = cauta( x );
if( it != v[ key ].end() )
v[ key ].erase( it );
}