Pagini recente » Cod sursa (job #2620755) | Cod sursa (job #1383623) | Cod sursa (job #960522) | Cod sursa (job #619463) | Cod sursa (job #1456994)
#include <bits/stdc++.h>
using namespace std;
typedef int var;
#define MAXD 20
#define INF (1<<31-1)
struct nod {
var val, sz;
nod **leg;
nod(var x, var s) {
val = x;
sz = s;
leg = new nod*[sz];
}
};
typedef nod* pnod;
pnod Temp[MAXD];
pnod root, nill;
pnod Find(var val) {
pnod p = root;
for(var d=MAXD-1; d>=0; d--) {
while(p->leg[d]->val < val)
p = p->leg[d];
Temp[d] = p;
}
return p;
}
void init() {
root = new nod(-INF, MAXD);
nill = new nod(INF, 0);
for(var i=0; i<MAXD; i++)
root->leg[i] = nill;
}
void insert(var val) {
Find(val);
var sz = 1;
while(rand() % 2) sz++;
pnod p = new nod(val, sz);
for(var d=0; d<sz; d++) {
p->leg[d] = Temp[d]->leg[d];
Temp[d]->leg[d] = p;
}
}
void erase(var val) {
pnod p = Find(val)->leg[0];
var sz = p->sz;
for(var d=0; d<sz; d++) {
Temp[d]->leg[d] = p->leg[d];
}
delete[] p->leg;
delete p;
}
int main() {
srand(time(NULL));
ifstream fin("algsort.in");
ofstream fout("algsort.out");
var n, val;
fin>>n;
init();
while(n--) {
fin>>val;
insert(val);
}
for(pnod p = root->leg[0]; p != nill; p = p->leg[0])
fout<<p->val<<" ";
return 0;
}