Cod sursa(job #2280576)

Utilizator stefanpiturStefan Alexandru Pitur stefanpitur Data 10 noiembrie 2018 21:02:00
Problema Hashuri Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.31 kb
#include <iostream>
#include <cstdio>
#define MOD 666019
using namespace std;
const int MAXN = 1000001;
class Hashuri{
public:
    int lista[MOD];
    int next[MAXN];
    int val[MAXN];
    int k;
    void insert(int element){
        k++;
        next[element]=lista[element%MOD];
        val[k]=element;
        lista[element%MOD]=k;
    }
    int find(int element){
        int p=lista[element%MOD];
        while(p!=0 && val[p]!=element)
            p=next[p];
        return p;
    }
    void erase(int element){
        int p=lista[element%MOD];
        if(p==0)
            return;
        else if(val[p]==element){
            lista[element%MOD]=next[p];
            return;
        }
        while(next[p]!=0 && val[next[p]]!=element)
            p=next[p];
        if(next[p]!=0)
            next[p]=next[next[p]];
    }
}H;
int main()
{
    FILE *fin, *fout;
    int n,i,tip,val;
    fin=fopen("hashuri.in","r");
    fout=fopen("hashuri.out","w");
    fscanf(fin,"%d",&n);
    for(i=1;i<=n;i++){
        fscanf(fin,"%d %d",&tip,&val);
        if(tip==1 && !H.find(val))
            H.insert(val);
        else if(tip==2)
            H.erase(val);
        else if(tip==3)
            fprintf(fout,"%d\n",(H.find(val)>0));
    }
    fclose(fin);
    fclose(fout);
    return 0;
}