Cod sursa(job #459001)

Utilizator crawlerPuni Andrei Paul crawler Data 27 mai 2010 16:35:30
Problema Hashuri Scor 30
Compilator c Status done
Runda Arhiva educationala Marime 1.21 kb
#include <stdio.h>
#include <string.h>

#define Nmax 1000000

int hash[Nmax], n;
int psr = 1234;

inline int f1(int nr) {
  return (nr + 242154) % 999959;
}

inline int f2(int nr) {
  return (nr + 759154) % 999961;
}

inline void add(int nr) {
  int h1 = f1(nr);
  int h2 = f2(nr);
  if (hash[h1] == 0) {
    hash[h1] = nr;
    return ;
  }
  if (hash[h2] == 0) {
    hash[h2] = nr;
    return ;
  }
  if (psr & 1) {
    add(hash[h1]);
    hash[h1] = nr;
    psr = (psr * 92742131)^0xffffffff;
  }
    else {
    add(hash[h2]);
    hash[h2] = nr;
    psr = (psr * 92742131)^0xffffffff;
  }
}

inline int search(int nr) {
  if (hash[f1(nr)] == nr)
    return 1;
  if (hash[f2(nr)] == nr)
    return 1;
  return 0;
}

inline void erase(int nr) {
  if (hash[f1(nr)] == nr)
    hash[f1(nr)] = 0;
  if (hash[f2(nr)] == nr)
    hash[f2(nr)] = 0;
}

int main() {
  freopen("hashuri.in",  "r", stdin );
  freopen("hashuri.out", "w", stdout);
  
  scanf("%d", &n);
  
  int tip, nr;
  
  while (n--) {
    scanf("%d%d", &tip, &nr);
    if (tip == 1)
      add(nr);
    if (tip == 2)
      erase(nr);
    if (tip == 3)
      printf("%d\n", search(nr));
  }
  

  return 0;
}