Cod sursa(job #2280629)

Utilizator stefanpiturStefan Alexandru Pitur stefanpitur Data 10 noiembrie 2018 22:12:59
Problema Hashuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.33 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=0;
    void insert(int element){
        k++;
        next[k]=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 ind=element%MOD;
        int p=lista[ind];
        if(p==0)
            return;
        else if(val[p]==element){
            lista[ind]=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",&n);
    for(i=1;i<=n;i++){
        fscanf(fin,"%d %d\n",&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;
}