Pagini recente » Cod sursa (job #1706665) | Cod sursa (job #2225029) | Cod sursa (job #718874) | Cod sursa (job #2177508) | Cod sursa (job #1326604)
#include<algorithm>
#include<iostream>
#include<fstream>
#include<stdio.h>
#include<queue>
using namespace std;
int n=1;
int v[200002];
void sus(int val,int poz)
{
while(poz>1&&val<v[poz/2])
{
v[poz]=v[poz/2];
// v[poz/2]=val;
poz=poz/2;
}
v[poz]=val;
}
void inserth(int val)
{
v[n]=val;
++n;
sus(v[n-1],n-1);
}
int searchh(int val)
{
queue<int> poz;
poz.push(1);
while(poz.size())
{
int x=poz.front();
poz.pop();
if(v[x]==val)
return x;
else
{
if(v[x*2]<=val)
poz.push(x*2);
if(v[x*2+1]<=val)
poz.push(x*2+1);
}
}
}
void jos(int poz,int val)
{
while(poz<n)
{
if(poz*2<n)
{
if(poz*2+1<n)
if(v[poz*2]<v[poz*2+1])
{
if(val>v[poz*2])
{
v[poz]=v[poz*2];
poz=poz*2;
}
else
break;
}
else
{
if(val>v[poz*2+1])
{
v[poz]=v[poz*2+1];
poz=poz*2+1;
}
else
break;
}
else
{
if(val>v[poz*2])
{
v[poz]=v[poz*2];
poz=poz*2;
}
else
break;
}
}
else
break;
}
v[poz]=val;
}
void deleteh(int poz)
{
v[poz]=v[n-1];
--n;
jos(poz,v[poz]);
}
int main()
{
ifstream si;
si.open("heapuri.in");
ofstream so;
so.open("heapuri.out");
int o;
si>>o;
int ord[o],m=0;
while(o--)
{
int op;
si>>op;
if(op==1)
{
int val;
si>>val;
ord[m]=val;
++m;
inserth(val);
}
else
if(op==2)
{
int val;
si>>val;
deleteh(searchh(ord[val-1]));
}
else
so<<v[1]<<'\n';
/* int i;
for(i=1;i<n;++i)
cout<<v[i]<<' ';
cout<<endl;*/
}
}