Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdlib>
- #include <fstream>
- #define NMAX 200001
- using namespace std;
- ifstream fin("heapuri.in");
- ofstream fout("heapuri.out");
- void inserare(int H[NMAX], int &n, int x)
- {
- int fiu, tata;
- fiu=++n;
- tata=fiu/2;
- while(tata && H[tata]>x)
- {
- H[fiu]=H[tata];
- fiu=tata;
- tata=fiu/2;
- }
- H[fiu]=x;
- }
- void creare_heap_inserare(int H[NMAX], int n)
- {
- int nr,i,x;
- n=0;
- fin >> nr;
- for(i=1; i<nr; i++)
- {
- fin >> x;
- inserare(H,n,x);
- }
- }
- void combinare(int H[NMAX], int n, int i)
- {
- int x=H[i], tata, fiu;
- tata=i;
- fiu=2*i;
- while(fiu <=n)
- {
- if(fiu+1<=n && H[fiu+1] < H[fiu]) fiu++; // cel mai mic dintre fii
- if(H[fiu]<x)
- {
- H[tata]=H[fiu];
- tata=fiu;
- fiu=tata*2;
- }
- else break; // am gasit locul potrivit
- }
- H[tata]=x;
- }
- void creare_heap_combinare(int H[NMAX], int &n)
- {
- int i;
- fin >> n;
- for(i=1; i<n; i++)
- fin >> H[i];
- for(i=n/2; i>0; i--)
- combinare(H,n,i);
- }
- int extrag_min(int H[NMAX],int n)
- {
- int minim=H[1];
- H[1]=H[n--];
- combinare(H,n,1);
- return minim;
- }
- int main()
- {
- int n, x, i;
- int H[NMAX];
- creare_heap_combinare(H,n);
- fout << extrag_min(H,n);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement