Cod sursa(job #1256284)

Utilizator CostanMiriamCostan Miriam CostanMiriam Data 6 noiembrie 2014 01:03:59
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.47 kb
#include <fstream>
#include <cstdlib>
#include <ctime>

using namespace std;

ifstream fin ("algsort.in");
ofstream fout ("algsort.out");

int n,i,x;

struct treap {
    treap *left, *right;
    int k,pr;
    treap(){};
    treap (int k, int pr, treap* left, treap* right) {
        this->k=k;
        this->pr=pr;
        this->left=left;
        this->right=right;
    }
} *R, *null;

void initializare () {
    R=null=new treap(0,0,NULL,NULL);
    srand(time(0));
}

void rotleft (treap* &nod) {
    treap *t=nod->left;
    nod->left=t->right;
    t->right=nod;
    nod=t;
}

void rotright (treap* &nod) {
    treap *t=nod->right;
    nod->right=t->left;
    t->left=nod;
    nod=t;
}

void corecteaza (treap* &nod){
    if (nod->left->pr > nod->pr)
        rotleft(nod);
    else
        if (nod->right->pr > nod->pr)
            rotright(nod);
}

void insereaza (treap* &nod,int k, int pr){
    if (nod==null) {
        nod=new treap(k,pr,null,null);
        return;
    }
    if (k < nod->k)
        insereaza (nod->left,k,pr);
    else
        insereaza (nod->right,k,pr);
    corecteaza(nod);
}

void afisare (treap* &nod) {
    if (nod==null)
        return;
    afisare (nod->left);
    fout<<nod->k<<" ";
    afisare (nod->right);
}


int main () {

    fin>>n;

    initializare ();

    for (i=1;i<=n;i++) {
        fin>>x;
        insereaza( R, x, rand() +1 );
    }

    afisare (R);

    return 0;
}