Pagini recente » Cod sursa (job #3286140) | Cod sursa (job #1857500) | Cod sursa (job #1499534) | Cod sursa (job #3251628) | Cod sursa (job #780858)
Cod sursa(job #780858)
#include<cstdio>
using namespace std;
int i, a[200001], b[200001], m, k, op, x;
//a=elemente
//b=pe ce pozitie se afla al x-elea inserat in ordine cronologica
void push_up(int poz) {
int aux;
if ((a[poz]<a[poz/2])&&(poz>=2)) {
aux=a[poz]; a[poz]=a[poz/2]; a[poz/2]=aux;
aux=b[poz]; b[poz]=b[poz/2]; b[poz/2]=aux;
push_up(poz/2);
}
}
void push_down(int poz){
int aux;
if (2*poz<=a[0]) {
if ((a[2*poz]<a[2*poz+1])&&(a[2*poz]<a[poz])) {
aux=a[poz]; a[poz]=a[2*poz]; a[2*poz]=aux;
aux=b[poz]; b[poz]=b[2*poz]; b[2*poz]=aux;
push_down(2*poz);
} else if (a[2*poz+1]<a[poz]) {
aux=a[poz]; a[poz]=a[2*poz+1]; a[2*poz+1]=aux;
aux=b[poz]; b[poz]=b[2*poz+1]; b[2*poz+1]=aux;
push_down(2*poz+1);
}}
}
int main(){
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
scanf("%d", &m);
a[0]=0; b[0]=0; a[1]=0; a[2]=0; a[3]=0;
for (k=1;k<=m;k++) {
scanf("%d", &op); if ((op==1)||(op==2)) scanf("%d", &x);
if (op==1) {
a[++a[0]]=x;
b[a[0]]=a[0];
push_up(a[0]); a[a[0]+1]=0; a[a[0]+2]=0;} else
if (op==2) {
for (i=1;i<=a[0];i++)
if (b[i]==x) {
a[i]=a[a[0]];
b[i]=b[a[0]];
a[0]--;
push_down(i);
}
} else
if (op==3) {printf("%d\n", a[1]);}
}
return 0;
}