Pagini recente » Cod sursa (job #1450333) | Cod sursa (job #254922) | Cod sursa (job #505253) | Cod sursa (job #1527452) | Cod sursa (job #1865453)
#include <cstdio>
using namespace std;
FILE *f, *g;
int HASH = (1 << 20) - 1;
int h(int x)
{
return (x & HASH);
}
int lst[1050000];
int urm[2000001];
int val[2000001];
int nr;
int n;
void add(int a, int b)
{
///nr = *p;
///urm = p -> urm
///val = p -> nr
int p = lst[a], nrul;
while(p != 0)
{
nrul = val[p];
if(nrul == b)
return;
p = urm[p];
}
val[++ nr] = b;
urm[nr] = lst[a];
lst[a] = nr;
}
void dilit(int a, int b)
{
int p = lst[a], nr;
while(p != 0)
{
nr = val[p];
if(nr == b)
{
val[p] = -1;
return;
}
p = urm[p];
}
}
bool cauta(int a, int b)
{
int p = lst[a], nr;
while(p != 0)
{
nr = val[p];
if(nr == b)
{
return 1;
}
p = urm[p];
}
return 0;
}
void readFile()
{
f = fopen("hashuri.in", "r");
g = fopen("hashuri.out", "w");
fscanf(f, "%d", &n);
int i, op, nr;
int found;
for(i = 1; i <= n; i ++)
{
fscanf(f, "%d%d", &op, &nr);
if(op == 1)
{
add(h(nr), nr);
}
if(op == 2)
{
dilit(h(nr), nr);
}
if(op == 3)
{
found = cauta(h(nr), nr);
if(found == 1)
fprintf(g, "1\n");
else
fprintf(g, "0\n");
}
}
fclose(f);
fclose(g);
}
int main()
{
readFile();
return 0;
}