Pagini recente » Cod sursa (job #3236790) | Cod sursa (job #2511016) | Cod sursa (job #1253171) | Cod sursa (job #1220815) | Cod sursa (job #1862612)
#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 add(int val) {
int key = val & Hsize;
H[key].push_back(val);
}
inline void scot(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 caut(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 numar(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.add(val);
}
if(op == 2) {
hh.scot(val);
}
if(op == 3) {
int c = hh.caut(val);
fout << c << '\n';
}
}
fclose(fin);
fout.close();
return 0;
}