Cod sursa(job #2506665)

Utilizator euyoTukanul euyo Data 8 decembrie 2019 16:42:44
Problema Hashuri Scor 30
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.25 kb
#include <stdio.h>
#define P 666013
#define MAXN 1000000
#define NIL 0

int in[P], next[MAXN + 1], val[MAXN + 1];

int main() {
  FILE *fin = fopen( "hashuri.in", "r" );
  FILE *fout = fopen( "hashuri.out", "w" );
  int n, i, op, x, nr, ant, num, k;

  fscanf( fin, "%d", &n );
  k = 1;
  for ( i = 0; i < n; ++i ) {
    fscanf( fin, "%d%d", &op, &x );
    switch( op ) {
    case 1:
      nr = num = in[x % P];
      while ( nr != NIL && val[nr] != x ) {
        nr = next[nr];
      }
      if ( nr == NIL ) {
        in[x % P] = k;
        val[k] = x;
        next[k] = next[num];
        ++k;
      }
      break;
    case 2:
      nr = in[x % P];
      ant = NIL;
      while ( nr != NIL && val[nr] != x ) {
        ant = nr;
        nr = next[nr];
      }
      if ( val[nr] == x && ant != NIL ) {
        next[ant] = next[next[ant]];
      } else if ( ant == NIL ) {
        in[x % P] = next[nr];
      }
      break;
    case 3:
      nr = in[x % P];
      while ( nr != NIL && val[nr] != x ) {
        nr = next[nr];
      }
      if ( nr == NIL ) {
        fprintf( fout, "0\n" );
      } else {
        fprintf( fout, "1\n" );
      }
      break;
    }
  }
  fclose( fin );
  fclose( fout );
  return 0;
}