Cod sursa(job #1751050)

Utilizator catu_bogdan_99Catu Bogdan catu_bogdan_99 Data 31 august 2016 17:11:48
Problema Hashuri Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.74 kb
#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; }