Cod sursa(job #2323538)

Utilizator SqueekDanielTodasca Daniel SqueekDaniel Data 19 ianuarie 2019 12:12:58
Problema Sortare prin comparare Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.56 kb
#include <bits/stdc++.h>

class InParser {
private:
	FILE *fin;
	char *buff;
	int sp;

	char read_ch() {
		++sp;
		if (sp == 4096) {
			sp = 0;
			fread(buff, 1, 4096, fin);
		}
		return buff[sp];
	}

public:
	InParser(const char* nume) {
		fin = fopen(nume, "r");
		buff = new char[4096]();
		sp = 4095;
	}

	InParser& operator >> (int &n) {
		char c;
		while (!isdigit(c = read_ch()) && c != '-');
		int sgn = 1;
		if (c == '-') {
			n = 0;
			sgn = -1;
		} else {
			n = c - '0';
		}
		while (isdigit(c = read_ch())) {
			n = 10 * n + c - '0';
		}
		n *= sgn;
		return *this;
	}

	InParser& operator >> (long long &n) {
		char c;
		n = 0;
		while (!isdigit(c = read_ch()) && c != '-');
		long long sgn = 1;
		if (c == '-') {
			n = 0;
			sgn = -1;
		} else {
			n = c - '0';
		}
		while (isdigit(c = read_ch())) {
			n = 10 * n + c - '0';
		}
		n *= sgn;
		return *this;
	}
};

struct Node {
    Node() {Left = Right = NULL;}
    Node *Left, *Right;
    int X;
}   *Root;

int N;

void Add(int X) {
    if (Root == NULL) {
        Root = new Node;
        Root->X = X;
        return;
    }

    Node *P = Root;
    while(true) {
        if (P->X > X) {
            if (P->Left) {
                P = P->Left;
            }
            else {
                P->Left = new Node;
                P->Left->X = X;
                return;
            }
        }
        else if (P->X <= X) {
            if (P->Right) {
                P = P->Right;
            }
            else {
                P->Right = new Node;
                P->Right->X = X;
                return;
            }
        }
    }
}

Node *Search(int X) {
    Node *P = Root;
    while(P) {
        if (P->X > X)
            P = P->Left;
        else if (P->X < X)
            P = P->Right;
        else return P;
    }   return NULL;
}

bool Contains(int X) {
    return (Search(X) != NULL);
}

void Erase(int X) {
    Node *P = Root;
    while(P) {
        if (P->X > X)
            P = P->Left;
        else if (P->X < X)
            P = P->Right;
        else {
            Node *ToErase = P;

        }
    }
}

InParser In("algsort.in");
std::ofstream Out("algsort.out");

void SRD(Node *P = Root) {
    if (P) {
        SRD(P->Left);
        Out << P->X << ' ' ;
        SRD(P->Right);
    }
}

void Citire() {
    In >> N;
    for (int i=1, x; i<=N; ++i)
        In >> x, Add(x);
}

void Rezolvare() {
    SRD();
}

int main()
{
    Citire();
    Rezolvare();

    return 0;
}