Cod sursa(job #672378)

Utilizator nutipasa16Macovei Claudiu nutipasa16 Data 1 februarie 2012 22:41:28
Problema Heapuri Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <fstream>
#include <queue>
#include <vector>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
struct elem{int val, nr_ord;}x,y[200000];
struct comp 
{bool operator() ( elem &A, elem &B )
	{return ( A.val > B.val ); // defineste ordinea inversa celei implicite (primul element va avea cea mai MICA valoare)
	}
};
priority_queue< elem, vector< elem >, comp > Q;
int n,c,nr,cor=1,j;
int main()
	{f>>n;
	for(register int i=1;i<=n;i++)
		{f>>c;
 		if(c==1){f>>x.val;
				 nr++;
				 x.nr_ord=nr;
				 Q.push(x);
				 }
		if(c==2){int k;
				 f>>k;
				 cor=1;
				 j=0;
				 while(!Q.empty() && cor){x=Q.top(); Q.pop();
										  if(x.nr_ord==k)cor=0;
										  else  y[++j].val=x.val,y[j].nr_ord=x.nr_ord;
										  }
				 for(register int e=1;e<=j;e++)Q.push(y[e]);
				 }
		if(c==3){x=Q.top();
				 g<<x.val<<'\n';
				 }
		}
	return 0;
	}