Nu aveti permisiuni pentru a descarca fisierul grader_test9.ok
Cod sursa(job #502444)
Utilizator | Data | 19 noiembrie 2010 15:26:37 | |
---|---|---|---|
Problema | Sortare prin comparare | Scor | 60 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.44 kb |
using namespace std;
#include<iostream>
#include<fstream>
#include<ctime>
#include<cstdlib>
#define oo 0x3f3f3f3f
ofstream fout("algsort.out");
struct T{
int key,p,c;
T *left,*right;
T(){}
T(int key,int p, T*left, T*right,int c)
{
this->key=key;
this->p=p;
this->c=c;
this->left=left;
this->right=right;
}
};
T *R,*nil;
int N;
void init()
{
R=nil=new T(-1,-oo,NULL,NULL,0);
}
void rotleft(T* &n)
{
T* t=n->left;
n->left=t->right;
t->right=n;
n=t;
}
void rotright(T* &n)
{
T* t=n->right;
n->right=t->left;
t->left=n;
n=t;
}
void balance(T* &n)
{
if(n->p<n->left->p) rotleft(n);
if(n->p<n->right->p) rotright(n);
}
void insert(int key,T* &n)
{ if(n->key==key)
{
n->c++; return;
}
if(n==nil)
{
n=new T(key,rand(),nil,nil,1);
return;
}
if(key<n->key) insert(key,n->left);
if(key>n->key) insert(key,n->right);
balance(n);
}
void parcurgere(T* n)
{
if(n->left!=nil)
parcurgere(n->left);
for(int i=1;i<=n->c;i++)
fout<<n->key<<" ";
if(n->right!=nil)
parcurgere(n->right);
}
void cit()
{int x;
ifstream fin("algsort.in");
fin>>N;
for(int i=1;i<=N;i++)
{
fin>>x;
insert(x, R);
}
parcurgere(R);
}
int main()
{ srand(time(0));
init();
cit();
fout.close();
return 0;
}