Pagini recente » tema | Cod sursa (job #1046824) | Cod sursa (job #588686) | Cod sursa (job #701306) | Cod sursa (job #904624)
Cod sursa(job #904624)
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;
#define MOD1 666013
#define MOD2 1009
vector <int> v1[MOD1],v2[MOD2];
int l1[MOD1],l2[MOD2];
inline int cauta(int x)
{
int i,k;
k=x%MOD1;
for(i=0;i<=l1[k];i++)
if(v1[k][i]==x)
return i;
k=x%MOD2;
for(i=0;i<=l2[k];i++)
if(v2[k][i]==x)
return i;
return -1;
}
void adauga(int x)
{
int k;
if(cauta(x)==-1) {
k=x%MOD1;
if(l1[k]<=l2[x%MOD2]) {
v1[k].push_back(x);
l1[k]++;
}
else {
k=x%MOD2;
v2[k].push_back(x);
l2[k]++;
}
}
}
void sterge(int x)
{
int poz;
poz=cauta(x);
if(poz!=-1) {
if(v1[x%MOD1][poz]==x) {
v1[x%MOD1].erase(v1[x%MOD1].begin()+poz);
l1[x%MOD1]--;
}
else {
v2[x%MOD2].erase(v2[x%MOD2].begin()+poz);
l2[x%MOD2]--;
}
}
}
int main ()
{
int n,i,op,x;
ifstream f("hashuri.in");
ofstream g("hashuri.out");
f>>n;
for(i=0;i<=MOD1-1;i++)
l1[i]=-1;
for(i=0;i<=MOD2-1;i++)
l2[i]=-1;
for(i=1;i<=n;i++) {
f>>op>>x;
if(op==1)
adauga(x);
else if(op==2)
sterge(x);
else {
if(cauta(x)==-1)
g<<"0"<<'\n';
else g<<"1"<<'\n';
}
}
f.close();
g.close();
}