Mai intai trebuie sa te autentifici.
Cod sursa(job #642502)
Utilizator | Data | 1 decembrie 2011 15:53:44 | |
---|---|---|---|
Problema | Sortare prin comparare | Scor | 60 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.64 kb |
#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";
ifstream fin( infile );
ofstream fout( outfile );
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 );
fout<< T -> key << " ";
write( T -> right );
}
int main(){
//srand( unsigned( time( 0 ) ) );
R = NIL = new Treap( 0, 0, NIL, NIL );
fin >> N;
for( ; N; N-- ){
fin >> key;
insert( R, key, rand() + 1 );
}
write( R );
fin.close();
fout.close();
return 0;
}