Nu aveti permisiuni pentru a descarca fisierul grader_test9.ok

Cod sursa(job #502444)

Utilizator gorgovanAurelian Namascu gorgovan 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;
}