Pagini recente » Cod sursa (job #1177002) | Cod sursa (job #1254285) | Cod sursa (job #272510) | Cod sursa (job #2216717) | Cod sursa (job #2761293)
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
int arb[130000],pas,n;
ifstream fin("order.in");
ofstream fout("order.out");
void creare_arbore(int nod, int st, int dr)
{
if(st==dr)
arb[nod] = 1;
else
{
int mij = (st+dr)/2;
creare_arbore(nod*2,st,mij);
creare_arbore(nod*2+1,mij+1,dr);
arb[nod]= arb[nod*2]+arb[nod*2+1];
}
}
void update(int nod, int st, int dr, int p)
{
if(st==dr)
{
arb[nod] = 0;
fout<<st<<" ";
}
else
{
int mij = (st+dr)/2;
if(arb[nod*2]!=0)
{
if(p<=arb[nod*2])
{
update(nod*2,st,mij,p);
arb[nod] = arb[nod*2]+arb[nod*2+1];
}
else
{
p = p-arb[nod*2];
update(nod*2+1,mij+1,dr,p);
arb[nod] = arb[nod*2]+arb[nod*2+1];
}
}
else
{
update(nod*2+1,mij+1,dr,p);
arb[nod] = arb[nod*2]+arb[nod*2+1];
}
}
}
int main()
{
fin>>n;
creare_arbore(1,1,n);
pas = 2;
cout<<arb[1];
while(arb[1]>0)
{
while(pas>=arb[1])
pas=pas-arb[1];
update(1,1,n,pas);
pas++;
}
return 0;
}