Pagini recente » Cod sursa (job #1739873) | Cod sursa (job #66760) | Cod sursa (job #1189663) | Cod sursa (job #2927645) | Cod sursa (job #1951430)
#include <bits/stdc++.h>
#define MOD (1 << 21)
using namespace std;
vector <int> Hash[MOD];
int n;
class Reader {
public:
Reader(FILE *_stream, const int _size = (1 << 16)):
size(_size),
pointer(0),
buffer(new char[_size]),
stream(_stream) {
assert(fread(buffer, 1, size, stream) != 0);
}
template<class IntType>
IntType NextInt() {
IntType value = 0;
bool negative = false;
while ((Current() < '0' || Current() > '9') && Current() != '-')
NextPosition();
if (Current() == '-') {
negative = true;
NextPosition();
}
while(Current() >= '0' && Current() <= '9') {
value = value * 10 + Current() - '0';
NextPosition();
}
if (negative)
value = -value;
return value;
}
Reader &operator>>(int &value) {
value = NextInt<int>();
return *this;
}
private:
int size, pointer;
char *buffer;
FILE *stream;
char Current() const {
return buffer[pointer];
}
void NextPosition() {
if(++pointer == size) {
assert(fread(buffer, 1, size, stream) != 0);
pointer = 0;
}
}
};
int query(int x)
{
auto it=find(Hash[x%MOD].begin(), Hash[x%MOD].end(),x);
if (it != Hash[x%MOD].end()) return 1;
return 0;
}
void addNumber(int x)
{
if(query(x)==0) Hash[x%MOD].push_back(x);
}
void removeNumber(int x)
{
auto it=find(Hash[x%MOD].begin(), Hash[x%MOD].end(),x);
if (it != Hash[x%MOD].end()) Hash[x%MOD].erase(it);
}
Reader f("hashuri.in");
ofstream g("hashuri.out");
int main()
{
f>>n;
for(int i=1;i<=n;i++)
{
int t,x;
f>>t>>x;
switch(t)
{
case 1:
addNumber(x);
break;
case 2:
removeNumber(x);
break;
case 3:
g<<query(x)<<'\n';
break;
}
}
}