Cod sursa(job #380514)

Utilizator Cristy94Buleandra Cristian Cristy94 Data 6 ianuarie 2010 15:20:43
Problema Heapuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include<fstream>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
int a[200001],n,i,maxim,p,t,j,x,y,nr,poz[200001],w,k;
int v[200001];
void combheap(int i, int u){
	  int s,d;
	  while(2*i<=u)
	  { maxim=a[i];
		  s=2*i;
		  d=2*i+1;
		if(maxim>a[s])
		  { maxim=a[s];
		    p=s;
		  }
		if(maxim>a[d] && d<=u)
		  { maxim=a[d];
		    p=d;
		  }
		if(maxim!=a[i]){
			t=a[i];
			a[i]=maxim;
			a[p]=t;
			poz[v[i]]=p;
			poz[v[p]]=i;
			t=v[i];
			v[i]=v[p];
			v[p]=t;

			
			i=p;
		}
		else 
			break;
	  }
}
		  

int main(){
f>>n;
nr=0;
w=0;
for(i=1;i<=n;i++)
	{ f>>x;
		if(x==1||x==2)
      	  f>>y;
if(x==1){
	nr++;w++;
	k=nr;
	while(k>1&&y<a[k/2]){
			a[k]=a[k/2];
			poz[v[k/2]]=k;
			v[k]=v[k/2];
			  k=k/2;
		}
		a[k]=y;
		v[k]=nr;
		poz[nr]=k;
		
}
else
if(x==2)
  { a[poz[y]]=a[w];
        w--;
   	 combheap(poz[y],w);
}
else if(x==3)
	g<<a[1]<<'\n';
	}

/*
for(i=n/2;i>0;i--)
	 combheap(i,n);	
for(i=1;i<=n;i++)
 { t=a[1];
    a[1]=a[n-i+1];
	a[n-i+1]=t;
	combheap(1,n-i);
   }
for(i=1;i<=n;i++)
	g<<a[i]<<" ";
*/

return 0;	
}