Cod sursa(job #1806450)

Utilizator andreeainfo_dAndreea Dutulescu andreeainfo_d Data 15 noiembrie 2016 12:47:50
Problema Order Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.83 kb
#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);
}