Pagini recente » Cod sursa (job #2753168) | Cod sursa (job #282991) | Cod sursa (job #113484) | Cod sursa (job #1256284)
#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;
}