Pagini recente » Cod sursa (job #2579252) | Cod sursa (job #194148) | Cod sursa (job #528271) | Cod sursa (job #924639) | Cod sursa (job #642484)
Cod sursa(job #642484)
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <fstream>
using namespace std;
struct Treap{
int key, priority;
Treap *left, *right;
Treap() {}
Treap( int key, int priority, Treap *left, Treap *right ){
this -> key = key;
this -> priority = priority;
this -> left = left;
this -> right = right;
}
} *R, *NIL;
const char infile[] = "algsort.in";
const char outfile[] = "algsort.out";
int N, key;
void rotleft(Treap *&T) {
Treap *t = T->left;
T->left = t->right, t->right = T;
T = t;
}
void rotright(Treap *&T) {
Treap *t = T->right;
T->right = t->left, t->left = T;
T = t;
}
void balance( Treap *&T ){
if( T -> left -> priority > T -> priority )
rotleft( T );
else
if( T -> right -> priority >= T -> priority )
rotright( T );
}
void insert( Treap *&T, int key, int priority ){
if( T == NIL ){
T = new Treap( key, priority, NIL, NIL );
return;
}
if( key < T -> key )
insert( T -> left, key, priority );
else
insert( T -> right, key, priority );
balance( T );
}
void write( Treap *T ){
if( T == NIL )
return;
write( T -> left );
printf( "%d ", T -> key );
write( T -> right );
}
int main(){
ifstream fin( infile );
freopen( outfile, "w", stdout );
srand( unsigned( time( 0 ) ) );
R = NIL = new Treap(0, 0, NULL, NULL);
fin >> N;
for( ; N; N-- ){
fin >> key;
insert( R, key, rand() + rand() );
}
write( R );
fclose( stdin );
fclose( stdout );
return 0;
}