Cod sursa(job #2506631)

Utilizator euyoTukanul euyo Data 8 decembrie 2019 16:18:05
Problema Hashuri Scor 30
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.32 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 );
    if ( in[x % P] == 0 ) {
      in[x % P] = k;
      ++k;
    }
    switch( op ) {
    case 1:
      nr = num = in[x % P];
      while ( nr != NIL && val[nr] != x ) {
        nr = next[nr];
      }
      if ( nr == NIL ) {
        in[x % P] = num + 1;
        val[num + 1] = x;
        next[num + 1] = next[num];
      }
      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;
}