Pagini recente » Cod sursa (job #2765420) | Cod sursa (job #2768281) | Cod sursa (job #2778031) | Cod sursa (job #2699031) | Cod sursa (job #2897143)
#include<iostream>
#include <fstream>
#include <string>
#include <memory>
#include <utility>
#include <cmath>
#include <vector>
#include <algorithm>
using namespace std;
ifstream f("zeap.in");
ofstream g("zeap.out");
vector <long long >diferente;
struct nod{
long long val;
nod *st, *dr;
};
nod *radacina = nullptr;
void afisare(nod *r)
{
if(r)
{
afisare(r->st);
g<<r->val<<' ';
afisare(r->dr);
}
}
void parcurgere(nod * r,long long &lungime)
{
if(r != nullptr)
{
parcurgere(r->st,lungime);
lungime++;
diferente.push_back(r->val);
parcurgere(r->dr,lungime);
}
}
long long max_dif() {
long long l = 0;
parcurgere(::radacina, l);
if (l < 2)
return -1;
else {
sort(diferente.begin(),diferente.end());
return abs(diferente[diferente.size()-1] - diferente[0]);
}
}
long long min_dif() {
long long l = 0;
parcurgere(::radacina,l);
if(l<2)
return -1;
else
{
sort(diferente.begin(),diferente.end());
long long minim = 10e9 +3;
for(long long i = 0;i<diferente.size()-1;i++)
if(abs(diferente[i] - diferente[i+1])< minim)
minim = abs(diferente[i] - diferente[i+1]);
return minim;
}
}
int cauta(nod * r,long long x)
{
if(r == nullptr)
return 0;
else if(x == r->val)
return 1;
else if(x<r->val)
cauta(r->st,x);
else if(x>r->val)
cauta(r->dr,x);
}
void insereaza(nod * &r, long long x)
{
if(cauta(r,x) == 1)
return;
else {
if (r == nullptr) {
r = new nod;
r->val = x;
r->st = nullptr;
r->dr = nullptr;
} else if(x<r->val)
insereaza(r->st,x);
else if(x>r->val)
insereaza(r->dr,x);
}
}
void stergere_cu_2_fii(nod * &r,nod*& desters)
{
if(r->dr != nullptr)
stergere_cu_2_fii(r->dr,desters);
else {
desters->val = r->val;
nod *temp = r;
r = r->st;
delete temp;
}
}
int sterge(nod * &r, long long x)
{
if(cauta(r,x) == 0)
return -1;
else {
if (r->val == x) {
if (r->st == nullptr && r->dr == nullptr) {
delete r;
r = nullptr;
} else if (r->st != nullptr) {
nod * temp = r;
r = r->st;
delete temp;
} else if (r->dr != nullptr) {
nod * temp = r;
r = r->dr;
delete temp;
}
else if(r->dr != nullptr && r->st != nullptr)
{
stergere_cu_2_fii(r->st,r);
}
} else if (x < r->val)
sterge(r->st, x);
else
sterge(r->dr, x);
}
}
int main()
{
long long n,s,i,x;
string comanda;
while (!f.eof())
{
// afisare(radacina);
// g<<'\n';
f>>comanda;
if(comanda.size()<3) {
f >> x;
if(comanda == "I")
{
insereaza(radacina,x);
}
else if(comanda == "S")
{
int y = sterge(radacina,x);
if(y == -1)
g<<-1<<'\n';
}
else if(comanda == "C")
{
g<<cauta(radacina,x)<<'\n';
}
}
else{
if(comanda == "MAX") {
g << max_dif() << '\n';
diferente.clear();
}
else if(comanda == "MIN") {
g << min_dif() << '\n';
diferente.clear();
}
}
}
f.close();g.close();
return 0;
}