Pagini recente » Cod sursa (job #161479) | Cod sursa (job #1885093) | Cod sursa (job #1695145) | Cod sursa (job #181650) | Cod sursa (job #563458)
Cod sursa(job #563458)
#include<stdio.h>
FILE*f=fopen("heapuri.in","r");
FILE*g=fopen("heapuri.out","w");
int n,i,x,l,v[200001],w[200001],q[200001];
void insert(int z){
int k=z;
int j=v[0];
while(v[j/2]>k&&j>1){
v[j]=v[j/2];
w[j]=w[j/2];
q[w[j]]=j;
j=j/2;
}
v[j]=k;
w[j]=++l;
q[w[j]]=j;
}
void sterge(int poz){
int aux=v[v[0]];
int aux1=w[v[0]];
v[v[0]]=v[poz];
v[poz]=aux;
w[poz]=aux1;
q[w[poz]]=j;
v[0]--;
int k=v[poz];
int kk=w[poz];
int j=poz;
if(v[2*j]<v[j]||v[2*j+1]<v[j]){
int ok=1;
while(ok){
int son=0;
if(2*j<=v[0]&&v[2*j]<k)
son=2*j;
if((2*j+1)<=v[0]&&v[2*j+1]<v[2*j]&&v[2*j+1]<k)
son=2*j+1;
if(son==0)
ok=0;
v[son]=v[j];
w[son]=w[j];
q[w[son]]=son;
}
v[j]=k;
w[j]=kk;
q[w[j]]=j;
}else{
int k=poz;
int jj=
int j=v[0];
while(v[j/2]>k&&j>1){
v[j]=v[j/2];
w[j]=w[j/2];
j=j/2;
}
v[j]=k;
}
}
int main() {
fscanf(f,"%d",&n);
for(i=1;i<=n;++i){
fscanf(f,"%d",&x);
if(x==1){
fscanf(f,"%d",&x);
v[0]++;
insert(x);
}else if(x==2){
fscanf(f,"%d",&x);
sterge(w[q[x]]);
}else
fprintf(g,"%d\n",v[1]);
}
fclose(g);
fclose(f);
return 0;
}