Pagini recente » Cod sursa (job #895717) | Cod sursa (job #2342679) | Cod sursa (job #1046145) | Cod sursa (job #1600924) | Cod sursa (job #2088255)
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cmath>
#include <vector>
#include <queue>
#include <algorithm>
#if 1
#define pv(x) cout<<#x<<" = "<<x<<"; ";cout.flush()
#define pn cout<<endl
#else
#define pv(x)
#define pn
#endif
using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");
#define ll long long
#define ull unsigned long long
#define pb push_back
#define mp make_pair
const int NMax = 5e5 + 5;
const int sqMax = 1048575;
const unsigned inf = 4e9 + 50;
int N,M;
struct {
unsigned idx,val;
}aint[sqMax];
void update(unsigned,unsigned,unsigned,unsigned,unsigned);
int main() {
/*
ll pw = 1;
while (pw < NMax) {
pw <<= 1;
}
out<<2*pw-1<<'\n';
//*/
in>>N;
for (int i=1;i <= N;++i) {
int val;
in>>val;
update(1,1,N,i,val);
}
for (int i=1;i <= N;++i) {
out<<aint[1].val<<' ';
update(1,1,N,aint[1].idx,inf);
}
return 0;
}
void update(unsigned node,unsigned st,unsigned dr,unsigned idx,unsigned val) {
int fs = node<<1, ss = fs + 1;
if (st == dr) {
aint[node].idx = idx;
aint[node].val = val;
return;
}
unsigned mid = (st+dr)>>1;
if (idx <= mid) {
update(fs,st,mid,idx,val);
}
else {
update(ss,mid+1,dr,idx,val);
}
if (aint[fs].val < aint[ss].val) {
aint[node] = aint[fs];
}
else {
aint[node] = aint[ss];
}
}