Pagini recente » Cod sursa (job #1962961) | Cod sursa (job #290809) | Cod sursa (job #721900) | Cod sursa (job #1136895) | Cod sursa (job #1424735)
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
struct treap {
int value;
int priority;
treap *left, *right;
treap (int _value = 0, int _priority = 0, treap *_left = NULL, treap *_right = NULL): value(_value), priority(_priority), left(_left), right(_right) {}
} *root, *nil;
inline void rot_left (treap* &t) {
treap* aux = t -> right;
t -> right = aux -> left;
aux -> left = t;
}
inline void rot_right (treap * &t) {
treap* aux = t -> left;
t -> left = aux -> right;
aux -> right = t;
}
inline void balance (treap* &t) {
if (t -> left -> priority > t -> priority)
rot_right(t);
else if (t -> right -> priority > t -> priority)
rot_left(t);
}
void ins (treap* &t, int value, int priority) {
if (t == nil) {
t = new treap(value, priority, nil, nil);
return ;
}
if (value < t -> value)
ins(t -> left, value, priority);
else if (value > t -> value)
ins(t -> right, value, priority);
balance(t);
}
bool found (treap* &t, int value) {
if (t == nil)
return false;
if (value < t -> value)
return found(t -> left, value);
else if (value > t -> value)
return found(t -> right, value);
else
return true;
}
void coboara (treap * &t) {
cout << "coboara " << endl;
if (t -> left == nil && t -> right == nil) {
delete t;
t = nil;
return ;
}
if (t -> left -> priority > t -> right -> priority) {
rot_right(t);
coboara(t -> right);
}
else {
rot_left(t);
coboara(t -> left);
}
balance(t);
}
void del (treap * &t, int value) {
if (t == nil)
return ;
if (value < t -> value)
del(t -> left, value);
else if (value > t -> value)
del(t -> right, value);
else {
t -> priority = -100;
coboara(t);
}
balance(t);
}
int main()
{
srand(time(0));
nil = new treap(-1, -1);
nil -> left = nil -> right = nil;
root = nil;
int t = 0;
cin >> t;
int tip, x;
while (t--) {
cin >> tip >> x;
if (tip == 1)
ins(root, x, rand());
else if (tip == 2)
del(root, x);
else
cout << found(root, x) << '\n';
}
return 0;
}