Mai intai trebuie sa te autentifici.
Cod sursa(job #832340)
Utilizator | Data | 10 decembrie 2012 14:25:39 | |
---|---|---|---|
Problema | Sortare prin comparare | Scor | 60 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.01 kb |
#include<fstream>
#include<algorithm>
using namespace std;
#define Nmax 524288
#define INF 1<<30
ifstream f("algsort.in");
ofstream g("algsort.out");
int aint[Nmax], V[Nmax], N, val;
void build(int nod, int st, int dr) {
if(st == dr) {
aint[nod] = V[st];
return;
}
int mij = (st+dr)/2;
build(2*nod, st, mij);
build(2*nod+1, mij+1, dr);
aint[nod] = min(aint[2*nod], aint[2*nod+1]);
}
void update(int nod, int st, int dr) {
if(st == dr) {
aint[nod] = INF;
return;
}
int mij = (st+dr)/2;
if(val >= aint[2*nod])
update(2*nod, st, mij);
else
update(2*nod+1, mij+1, dr);
aint[nod] = min(aint[2*nod], aint[2*nod+1]);
}
int main() {
int i;
f>>N;
for(i=1; i<=N; ++i)
f>>V[i];
build(1, 1, N);
for(i=1; i<=N; ++i) {
g<<aint[1]<<" ";
val = aint[1];
update(1, 1, N);
}
f.close();
g.close();
return 0;
}