Pagini recente » Cod sursa (job #228745) | Cod sursa (job #249621) | Cod sursa (job #2471009) | Cod sursa (job #685066) | Cod sursa (job #561669)
Cod sursa(job #561669)
#include <iostream>
#include <fstream>
#include <sstream>
#include <cstring>
#include <string>
#include <vector>
#include <algorithm>
#include <cmath>
#include <set>
#include <map>
using namespace std;
typedef vector<int> VI;
typedef vector<VI> VVI;
typedef vector<VVI> VVVI;
typedef long long LL;
typedef vector<LL> VLL;
typedef vector<VLL> VVLL;
typedef vector<double> VD;
typedef vector<VD> VVD;
typedef vector<string> VS;
#define pb push_back
#define sz size()
#define SORT(x) sort(x.begin(), x.end())
#define REVERSE(x) reverse(x.begin(), x.end())
#define REP(x, hi) for (size_t x=0; x<(hi); x++)
#define REPD(x, hi) for (size_t x=((hi)-1); x>=0; x--)
#define FOR(x, lo, hi) for (size_t x=(lo); x<(hi); x++)
#define FORD(x, lo, hi) for (size_t x=((hi)-1); x>=(lo); x--)
#define FORALL(it,x) for (typeof(x.begin()) it=x.begin(); it!=x.end(); it++)
#define INFILE "hashuri.in"
#define OUTFILE "hashuri.out"
ifstream fin (INFILE);
ofstream fout (OUTFILE);
#define MOD 1000003
struct nod{
int val;
nod* next;
nod() : val(0), next(NULL) {}
};
nod* table[MOD] = {NULL};
int contains(int x)
{
int key = x % MOD;
nod* n = table[key];
while( n!=NULL)
{
if( n->val==x )
return 1;
n = n->next;
}
return 0;
}
void add(int x)
{
if( contains(x) )
return;
int key = x % MOD;
nod* nx = new nod();
nx->val = x;
if( table[key]==NULL)
{
table[key] = nx;
}
else
{
nod* n = table[key];
while( n->next!=NULL )
n = n->next;
n->next = nx;
}
}
void del(int x)
{
int key = x % MOD;
nod* n = table[key];
if( n==NULL )
return;
if( n->val==x )
{
table[key] = n->next;
delete n;
}
else
while( n->next!=NULL )
{
if( n->next->val==x )
{
nod* aux = n->next;
n->next = aux->next;
delete aux;
}
n = n->next;
}
}
int main()
{
int n, nr;
char op;
fin >> n;
while( n-- )
{
fin >> op >> nr;
if( op=='1' ) add(nr);
else if( op=='2' ) del(nr);
else fout << contains(nr) << endl;
}
return 0;
}