Cod sursa(job #1862593)

Utilizator mihai.alphamihai craciun mihai.alpha Data 30 ianuarie 2017 08:40:02
Problema Hashuri Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 2.06 kb
#include <bits/stdc++.h>

using namespace std;

FILE *fin;
ofstream fout("hashuri.out");

#define BUF 1 << 17

int pos = BUF;
char buf[BUF];

inline char next()  {
    if(pos == BUF)
        fread(buf, 1, BUF, fin), pos = 0;

    return buf[pos++];
}

inline int read()  {
    int x = 0, semn = 1;
    char ch = next();

    while(!isdigit(ch) && ch != '-')
        ch = next();

    if(ch == '-')
        ch = next(), semn = -1;

    while(isdigit(ch))
        x = x * 10 + ch - '0', ch = next();

    return x * semn;
}

class Hash  {
    private:
    static const int Hsize = 1 << 14 - 1;
    vector <int> H[Hsize + 1];

    public:

    inline void insert(int val)  {
        int key = val & Hsize;

        H[key].push_back(val);
    }

    inline void erase(int val)  {
        int key = val & Hsize;

        int i = 0, sz = H[key].size();
        while(i < sz && H[key][i] != val)
            i++;

        if(i < sz)  {
            H[key][i] = H[key][sz - 1];
            H[key].pop_back();
        }
    }

    inline bool find(int val)  {
        int key = val & Hsize;
        int i = 0, sz = H[key].size();

        while(i < sz && H[key][i] != val)
            i++;

        if(i < sz)
            return true;

        return false;
    }

    inline int count(int val)  {
        int key = val & Hsize;
        int i = 0, sz = H[key].size();
        int tr = 0;

        while(i < sz)  {
            if(H[key][i] == val)
                tr++;

            i++;
        }

        return tr;
    }
};

Hash hh;


int main()  {
    fin = fopen("hashuri.in", "r");
    ofstream fout("hashuri.out");

    int N = read();

    for(int i = 0;i < N;i++)  {
        int op = read(), val = read();

        if(op == 1)  {
            hh.insert(val);
        }
        if(op == 2)  {
            hh.erase(val);
        }
        if(op == 3)  {
            int c = hh.find(val);

            fout << c << '\n';
        }
    }

    fclose(fin);
    fout.close();

    return 0;

}