Pagini recente » Cod sursa (job #1179231) | Cod sursa (job #1006181) | Cod sursa (job #2494487) | Cod sursa (job #513372) | Cod sursa (job #2446816)
#include <bits/stdc++.h>
#define lll long long
#define pii pair<int,int>
#define pll pair<lll,lll>
#define fi first
#define se second
#define vi vector<int>
#define pb push_back
#define sz(a) (int)(a).size()
#define inf (INT_MAX/2-1)
#define infl (1LL<<61)
#define aaa system("pause");
#define dbg(x) cerr<<(#x)<<' '<<(x)<<'\n',aaa
#define dbga(x,n) cerr<<(#x)<<"[]: ";for(int _=0;_<=n;_++) cerr<<x[_]<<" ";cerr<<'\n'; aaa
#define maxn 200000
using namespace std;
int wh[maxn+5];
FILE *fin, *fout;
namespace prs {
const int DIM = (1<<17);
char BUFF[DIM+5];
int kbu = 0;
void reset () { if ( prs::kbu == prs::DIM ) fread ( prs::BUFF, 1, prs::DIM, fin ), prs::kbu = 0; }
void read ( int &nr ) {
nr = 0;
while ( prs::BUFF[prs::kbu] < '0' || prs::BUFF[prs::kbu] > '9' ) { prs::kbu++; prs::reset (); }
while ( prs::BUFF[prs::kbu] >= '0' && prs::BUFF[prs::kbu] <= '9' ) { nr = nr * 10 + prs::BUFF[prs::kbu++] - '0'; prs::reset (); }
}
}
namespace shp {
pii heap[8*maxn+5];
int ne, ii;///ii = insert index
///fi=val se=index intrare
void swapheap (int p, int q) {
wh[shp::heap[q].se] = p;
wh[shp::heap[p].se] = q;
swap (shp::heap[p], shp::heap[q]);
}
void upheap (int p) {
if (p == 1) return;
if (shp::heap[p/2] > shp::heap[p]) {
shp::swapheap (p/2, p);
shp::upheap (p/2);
}
}
void insert (int x) {
shp::heap[++shp::ne] = {x, shp::ii};
wh[shp::ii++] = shp::ne;
shp::upheap (shp::ne);
}
void downheap (int p) {
if (p > ne) return;
int m = p*2;
if (shp::heap[m] > shp::heap[m+1]) m++;
if (shp::heap[p] < shp::heap[m]) return;
shp::swapheap (p, m);
shp::downheap (m);
}
void erase (int ind) {
int p = wh[ind];
shp::swapheap (p, shp::ne);
shp::heap[shp::ne--] = {inf, 0};
shp::downheap (p);
}
int minheap () { return shp::heap[1].fi; }
}
int main () {
fin = fopen ( "heapuri.in", "r" );
fout = fopen ( "heapuri.out", "w" );
int q; prs::read(q);
int op, a;
for (int i = 0; i <= 8*maxn; i++) shp::heap[i] = {inf,-1};///??dc nu 0
while (q--) {
prs::read(op);
if (op < 3) prs::read(a);
if (op == 1) shp::insert(a);
else if (op == 2) shp::erase(a-1);
else fprintf (fout, "%d\n", shp::minheap());
}
fclose(fin); fclose(fout);
return 0;
}