Cod sursa(job #244479)

Utilizator andrei-alphaAndrei-Bogdan Antonescu andrei-alpha Data 15 ianuarie 2009 09:49:33
Problema Hashuri Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.34 kb
using namespace std;

#include <set>
#include <map>
#include <list>
#include <deque>
#include <stack>
#include <queue>
#include <cmath>
#include <cstdio>
#include <vector>
#include <string>
#include <bitset>
#include <utility>
#include <algorithm>

#define score 100
#define pb push_back
#define sz size
#define f first
#define s second
#define II inline
#define ll long long
#define db double
#define FOR(i,a,b) for(int i=a;i<=b;++i)
#define all(v) v.begin() , v.end()
#define CC(v) memset((v),0,sizeof((v)))
#define CP(v,w) memcpy((v),(w),sizeof((w)))
#define mp make_pair


typedef vector<int> VI;
typedef pair<int,int> pi;
typedef vector<string> VS;

#define IN  "hashuri.in"
#define OUT "hashuri.out"
#define MOD 666013

vector< vector<int> > A(MOD+1);

II int find(int x)
{
	int rest = x % MOD;
	int cat = x / MOD;
	FOR(i,0,(int)A[rest].sz()-1)
		if(A[rest][i] == cat)
			return i+1;
	return 0;	
}

II void erase(int x,int poz)
{
	if(!poz)
		return;
	A[x%MOD][poz-1] = -1;
}

II void insert(int x)
{
	A[x%MOD].pb(x/MOD);
}

int main()
{
	int N,t,y;
	
	freopen(IN,"r",stdin);
	freopen(OUT,"w",stdout);
	scanf("%d",&N);
	
	for(++N;--N;)
	{
		scanf("%d%d",&t,&y);
		if(t==1 && !find(y) )
			insert(y);
		if(t==2)
			erase(y,find(y));
		if(t==3)
			printf("%d\n",find(y) );
	}	
	return 0;
}