Pagini recente » Cod sursa (job #2271888) | Cod sursa (job #1806827) | Cod sursa (job #946920) | Cod sursa (job #2458914) | Cod sursa (job #1457174)
#include <bits/stdc++.h>
using namespace std;
typedef int var;
struct Treap {
struct nod {
var val, priority;
nod *ls, *ld;
nod(var val, var priority, nod* s, nod* d) {
this->priority = priority;
this->val = val;
ls = s; ld = d;
}
};
typedef nod* pnod;
pnod nill, root;
Treap() {
nill = new nod(0, -1, nill, nill);
nill->priority = -1;
root = nill;
}
void rot_left(pnod &p) {
pnod aux = p->ld;
p->ld = aux->ls;
aux->ls = p;
p = aux;
}
void rot_right(pnod &p) {
pnod aux = p->ls;
p->ls = aux->ld;
aux->ld = p;
p = aux;
}
void _insert(pnod &p, const var &val, const var &pri) {
if(p == nill) {
p = new nod(val, pri, nill, nill);
} else {
if(val < p->val) _insert(p->ls, val, pri);
else if(val > p->val) _insert(p->ld, val, pri);
if(p->priority < p->ls->priority)
rot_right(p);
else if(p->priority < p->ld->priority)
rot_left(p);
}
}
void insert(var val) {
_insert(root, val, rand());
}
void _erase(pnod &p, const var &val) {
if(p == nill) return;
if(val < p->val) return _erase(p->ls, val);
if(val > p->val) return _erase(p->ld, val);
if(p->ls == nill && p->ld == nill) {
delete p; p = nill; return;
}
(p->ls->priority > p->ld->priority) ? rot_right(p) : rot_left(p);
_erase(p, val);
}
void erase(var val) {
_erase(root, val);
}
pnod _find(pnod &p, const var &val) {
if(p == nill) return NULL;
if(val < p->val) return _find(p->ls, val);
if(val > p->val) return _find(p->ld, val);
return p;
}
pnod find(var val) {
return _find(root, val);
}
void _print(pnod &p) {
if(p == nill) return;
_print(p->ls);
cout << p->val << " ";
_print(p->ld);
}
void print() {
_print(root);
}
};
Treap T;
void Read(var &a) {
a = 0;
char c;
for(c = getchar(); !isdigit(c); c = getchar());
for(;isdigit(c); c = getchar())
a = a * 10 + c - '0';
}
int main() {
freopen("hashuri.in", "r", stdin);
freopen("hashuri.out", "w", stdout);
var m, t, a;
Read(m);
while(m--) {
Read(t); Read(a);
if(t == 1) T.insert(a);
else if(t == 2) T.erase(a);
else printf("%d\n", (T.find(a) != NULL));
}
return 0;
}