Pagini recente » clasament-arhiva-educationala | Cod sursa (job #316750) | Cod sursa (job #3232515) | Cod sursa (job #2653673) | Cod sursa (job #495256)
Cod sursa(job #495256)
#include<fstream>
using namespace std;
const char iname[]="hashuri.in";
const char oname[]="hashuri.out";
const int hs=2015177;
const int p1=1726943;
const int p2=1870667;
ifstream f(iname);
ofstream g(oname);
int H[hs],n,x,t;
inline bool find(int x)
{
int h1=((long long)x*(long long)p1)%hs;
int h2=((long long)x*(long long)p2)%hs;
return H[h1]==x||H[h2]==x;
}
inline void erase(int x)
{
int h1=((long long)x*p1)%hs;
if(H[h1]==x)
{
H[h1]=0;
return;
}
int h2=((long long)x*p2)%hs;
H[h2]=0;
}
inline void insert(int x)
{
int h1=((long long)x*p1)%hs;
if(H[h1]==0)
{
H[h1]=x;
return;
}
do
{
int h2=((long long)x*p2)%hs;
if(H[h2]==0)
{
H[h2]=x;
return;
}
int aux=H[h2];
H[h2]=x;
x=aux;
}while(1);
}
int main()
{
f>>n;
while(n--)
{
f>>t>>x;
switch(t)
{
case 1: if(find(x)==false) insert(x);break;
case 2: if(find(x)==true) erase(x);break;
default: g<<(int)find(x)<<"\n";
}
}
}