Cod sursa(job #1283109)

Utilizator deresurobertoFMI - Deresu Roberto deresuroberto Data 5 decembrie 2014 02:31:02
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.55 kb
//Roberto Deresu - FMI
//Re :)
#include<fstream>
#include<algorithm>
#include<climits>
#include<vector>
using namespace std;
int n,tip,val,k,i,lg;
vector<int>v[100];

ifstream fin("algsort.in");
ofstream fout("algsort.out");

struct nod
{
    int val;
    int nr;
    nod *st,*dr;
};

nod *x = new nod;

void insert(nod *c, int val)
{
    if(val <= c->val)
    {
        if(c->st)
        {
            insert(c->st, val);
            c->nr = c->nr + 1;
        }

        else
        {
            c->nr = c->nr + 1;

            c->st = new nod;
            c->st->val = val;
            c->st->nr = 1;
            c->st->st = c->st->dr =0 ;
        }
    }
    else
    {
        if(c->dr)
            insert(c->dr, val);
        else
        {
            c->dr = new nod;
            c->dr->val = val;
            c->dr->nr = 1;
            c->dr->st = c->dr->dr = 0;
        }
    }
}

int querry(nod *c, int k)
{
    if(c->nr == k)
        return c->val;

    if(c->nr > k) querry(c->st, k);
    else        querry(c->dr, k - c->nr);
}

void SVD(nod *c)
{
    if(c->st)
        SVD(c->st);

    fout<<c->val<<" ";

    if(c->dr)
        SVD(c->dr);
}

int main()
{
	fin>>n;

	x->val = INT_MIN;
	x->st = x->dr = 0;

	for(i=1;i<=n;i++)
	{
	    tip = 1;

	    if(tip==1)
	    {
	        fin>>val;
	        insert(x, val);
	    }
	    if(tip==2)
	    {
	        fin>>k;
	        fout<<querry(x->dr, k)<<"\n";
	    }
	    if(tip == 3) SVD(x->dr);
	}

	SVD(x->dr);

	return 0;
}