Pagini recente » Cod sursa (job #2407040) | Cod sursa (job #1468046) | Cod sursa (job #2313253) | Cod sursa (job #1920640) | Cod sursa (job #2742874)
#include <vector>
#include <iostream>
#include <fstream>
using namespace std;
void urca(int heap[], int n, int pozitie ){
int ok = 1, x;
while( ok != 0 && pozitie > 0 ){
if( heap[(pozitie-1)/2] > heap[pozitie] ){
x = heap[pozitie];
heap[pozitie] = heap[(pozitie-1)/2];
heap[(pozitie-1)/2] = x;
pozitie = (pozitie - 1)/2;
}
else ok = 0;
}
}
void coboara( int heap[], int n, int pozitie ){
int ok = 1, x;
while( pozitie*2+2 < n && ok ==1 ){
if( heap[pozitie*2+1] < heap[pozitie*2+2] && heap[pozitie*2+1] < heap[pozitie] ){
x = heap[pozitie];
heap[pozitie] = heap[pozitie*2+1];
heap[pozitie*2+1] = x;
pozitie = pozitie*2+1;
}
else{
if( heap[pozitie*2+2] < heap[pozitie*2+1] && heap[pozitie*2+2] < heap[pozitie] ){
x = heap[pozitie];
heap[pozitie] = heap[pozitie*2+2];
heap[pozitie*2+2] = x;
pozitie = pozitie*2+2;
}
else ok = 0;
}
}
if( pozitie*2+2 == n && heap[pozitie] > heap[pozitie*2+1] ){
x = heap[pozitie];
heap[pozitie] = heap[pozitie*2+1];
heap[pozitie*2+1] = x;
pozitie = pozitie*2+1;
}
}
int cautare( int heap[], int n, int numar ){
int ok = 1;
for( int i = 0; i < n && ok == 1 ; i++ ){
if( heap[i] == numar ){
ok = 0;
return i;
}
}
}
int adauga_element( int heap[], int &n, int numar ){
heap[n] = numar;
n++;
urca( heap, n, n-1 );
}
int elimina_element( int heap[], int &n, int numar ){
int i = cautare( heap, n, numar );
heap[i] = heap[ n - 1 ];
n--;
coboara( heap, n, i );
urca( heap, n, i );
}
int main(){
ifstream fin( "heapuri.in" );
ofstream fout( "heapuri.out" );
int n;
fin >> n;
int heap[n];
int numere[n];
int hi = 0;
int ni = 0;
for( int i = 0; i < n; i++ ){
int operatie;
fin >> operatie;
if( operatie == 1 ){
int numar;
fin >> numar;
numere[ni] = numar;
ni++;
adauga_element( heap, hi, numar );
}
if( operatie == 2 ){
int pozitie;
fin >> pozitie;
elimina_element( heap, hi, numere[pozitie-1] );
}
if( operatie == 3 ){
fout << heap[0] << endl;
}
}
}