Pagini recente » Cod sursa (job #1584305) | Cod sursa (job #1642089) | Cod sursa (job #3267279) | Cod sursa (job #2272572) | Cod sursa (job #1806450)
#include <bits/stdc++.h>
using namespace std;
int ;
struct treap()
{
int val, prior;
treap *left, *right;
treap(){}
treap(int val, int prior, treap *left, treap *right)
{
this->val=val;
this->prior=prior;
this->left=left;
this->right=right;
}
};
treap *rad, *nil;
void init(treap *&rad)
{
srand(unsigned(time(0)));
rad=nil=new treap(0,0,NULL,NULL);
}
int cauta(treap *nod, int val)
{
if(nod==nil)return 0;
if(nod->val==val)return val;
if(val<nod->val)return cauta(nod->left,val);
else return cauta(nod->right,val);
}
void rot_left(treap *&nod)
{
treap *t=nod->left;
nod->left=t->right;
t->right=nod;
nod=t;
}
void rot_right(treap *&nod)
{
treap *t=nod->right;
nod->right=t->left;
t->left=nod;
nod=t;
}
void balance(treap *&nod)
{
if(nod->left->prior > nod->prior)rot_left(nod);
else if (nod->right->prior > nod->prior)rot_right(nod);
}
void inserare(treap *&nod, int val, int prior)
{
if(nod==nil)
{
nod=new treap(val,prior,nil,nil);
return;
}
if(val < nod->val)inserare(nod->left, val, prior);
else if (key > nod->key)inserare(nod->right, val, prior);
balance(nod);
}
void stergere(treap *&nod, int val)
{
if(nod==nil)return;
if(val < nod->val)stergere(nod->left, val)
else if(val > nod->val)stregere(nod->right, val);
else
{
if(nod->left==nil&&nod->right==nil)
{
delete nod;
nod=nil;
}
else
{
if(nod->left->priority > nod->right->priority)rot_left(nod);
else rot_right(nod);
stergere(nod, val);
}
}
}
int main()
{
freopen("order.in","r",stdin);
freopen("order.out","w",stdout);
}