Pagini recente » Cod sursa (job #132656) | Cod sursa (job #421774) | Cod sursa (job #451731) | Cod sursa (job #2038761) | Cod sursa (job #1052263)
#include <fstream>
#include <iostream>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
void adaug(int* &v,int* &p,int* &z,int &nr_curent,int &nr_total,int x){
int aux,poz = nr_curent+1;
++nr_curent;
++nr_total;
v[poz ]= x;
p[nr_total] = poz;
z[nr_total] = nr_total;
if(poz != 1)
while(v[poz] < v[poz/2]){
aux = v[poz];
v[poz] = v[poz/2];
v[poz/2] = aux;
p[nr_total] = poz/2;
p [ z [poz/2] ] = poz;
z[poz] = z[poz/2];
z[poz/2] = nr_total;
poz/=2;
if(poz==1)
break;
}
}
void afisez(int* &v){
g<<v[1]<<"\n";
}
void sterg(int* &v,int* &p,int* &z,int &nr_curent,int nr_total,int x){
int aux,poz = p[x],poz2;
aux = v[nr_curent];
v[nr_curent] = v[p[x]];
v[p[x]] = aux;
p[z[nr_curent]] = p[x];
z[p[x]] = z[p[nr_curent]];
--nr_curent;
while((poz*2 + 1)<=nr_curent){
if(2*poz < 2*poz + 1)
poz2 = 2*poz;
else
poz2 = 2*poz + 1;
if(v[poz] > v[poz2]){
aux = v[poz];
v[poz] = v[poz2];
v[poz2] = aux;
p[z[poz]] = poz2;
p[z[poz2]] = poz;
aux = z[poz2];
z[poz] = z[poz2]; // posibila greseala
z[poz2] = aux;
poz = poz2;
}
else break;
}
if(poz*2 == nr_curent){
poz2 = nr_curent;
aux = v[poz];
v[poz] = v[poz2];
v[poz2] = aux;
p[z[poz]] = poz2;
p[z[poz2]] = poz;
aux = z[poz2];
z[poz] = z[poz2]; // posibila greseala
z[poz2] = aux;
}
}
int main(){
int n,*v,*p,*z,nr_curent=0,nr_total=0,comanda,a;
f>>n;
++n;
v = new int[2000001];
p = new int[2000001];
z = new int[2000001];
for(int i=0;i<n;++i){
f>>comanda;
if(comanda == 1){
f>>a;
adaug(v,p,z,nr_curent,nr_total,a);
}
else if(comanda == 2){
f>>a;
sterg(v,p,z,nr_curent,nr_total,a);
}
else{
afisez(v);
}
}
for(int i=1;i<n;++i)
cout<<v[i]<<" ";
cout<<endl;
for(int i=1;i<n;++i)
cout<<p[i]<<" ";
cout<<endl;
for(int i=1;i<n;++i)
cout<<z[i]<<" ";
cout<<endl;
return 0;
}