Pagini recente » Cod sursa (job #1443334) | Cod sursa (job #973184) | Cod sursa (job #793318) | Cod sursa (job #695556) | Cod sursa (job #1480166)
#include <algorithm>
#include <ctime>
using namespace std;
int V[500001];
struct SkipList {
#define MAXD 14
#define MAXN 500001
struct node {
int key, *nxt;
};
node T[MAXN];
int nodes = 0;
int stop[MAXD];
SkipList() {
T[0].key = INFINITY; T[0].nxt = new int[MAXD];
for(int i=0; i<MAXD; i++)
T[0].nxt[i] = 0;
srand(time(0));
}
int find(int key) {
int node = 0;
for(int i=MAXD-1; i>=0; i--) {
while(T[T[node].nxt[i]].key < key)
node = T[node].nxt[i];
stop[i] = node;
}
return T[node].nxt[0];
}
void insert(int key) {
find(key);
int cnt = 1;
while(rand() % 2 && ++cnt <= MAXD);
T[++nodes].key = key;
T[nodes].nxt = new int[cnt];
for(int i=0; i<cnt; i++) {
T[nodes].nxt[i] = T[stop[i]].nxt[i];
T[stop[i]].nxt[i] = nodes;
}
}
void erase(int key) {
int i = find(key);
int cnt = sizeof(T[i].nxt) / sizeof(T[i].nxt[0]);
for(int i=0; i<cnt; i++)
T[stop[i]].nxt[i] = T[i].nxt[i];
}
void output() {
for(int i=T[0].nxt[0]; i; i = T[i].nxt[0]) {
printf("%d ", T[i].key);
}
}
};
SkipList T;
void Read(int &a) {
char c;
for(c = getchar(); !isdigit(c); c = getchar());
for(a = 0; isdigit(c); a = a*10+c-'0', c = getchar());
}
int main() {
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
int n, val;
Read(n);
for(int i=1; i<=n; i++) {
Read(val);
T.insert(val);
}
T.output();
return 0;
}