Pagini recente » Cod sursa (job #310775) | Cod sursa (job #2915644) | Cod sursa (job #683954) | Cod sursa (job #2705765) | Cod sursa (job #891062)
Cod sursa(job #891062)
#include <stdio.h>
using namespace std;
#define MAX_N 200000
int N;
struct nod
{
int nr,n;
nod *next;
}*First,*List[MAX_N];
nod * Insert(nod *p,int nr,int n){
if(p->next==0||nr<p->next->nr){
nod *q=new nod;
q->nr=nr;
q->n=n;
q->next=p->next;
p->next=q;
if(q->next){
// printf("n:%d\n",q->next->n);
List[q->next->n]=q;
}
return p;
}
return Insert(p->next,nr,n);
}
int ReturnMin(){
return First->next->nr;
}
void Delete(int nr){
nod *p=List[nr];
nod *q=p->next;
p->next=q->next;
delete q;
List[nr]=0;
if(p->next)
List[p->next->nr]=p;
}
int main()
{
First=new nod;
First->next=0;
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
scanf("%d\n",&N);
int i,n=0,type,nr;
for(i=1;i<=N;i++){
scanf("%d ",&type);
if(type==1){
n++;
scanf("%d\n",&nr);
List[n]=Insert(First,nr,n);
}
else if(type==2){
scanf("%d\n",&nr);
Delete(nr);
}
else{
scanf("\n");
printf("%d\n",ReturnMin());
}
}
/*
List[1]=Insert(First,4,1);
List[2]=Insert(First,7,2);
List[3]=Insert(First,9,3);
printf("%d\n",ReturnMin());
List[4]=Insert(First,2,4);
Delete(1);
printf("%d\n",ReturnMin());
printf("%d\n",List[4]->next->nr);*/
fclose(stdin);
fclose(stdout);
return 0;
}