Pagini recente » Cod sursa (job #1829773) | Cod sursa (job #3172299) | Cod sursa (job #90478) | Cod sursa (job #289332) | Cod sursa (job #1480160)
#include <fstream>
#include <algorithm>
using namespace std;
int V[500001];
struct SkipList {
#define MAXD 10
#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;
}
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(ofstream &fout) {
for(int i=T[0].nxt[0]; i; i = T[i].nxt[0]) {
fout<<T[i].key<<" ";
}
}
};
SkipList T;
int main() {
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int n, val;
fin>>n;
for(int i=1; i<=n; i++) {
fin>>val;
T.insert(val);
}
T.output(fout);
return 0;
}