Pagini recente » Istoria paginii deque-si-aplicatii | Cod sursa (job #274313) | Cod sursa (job #1008035) | Istoria paginii utilizator/apostoliliedaniel | Cod sursa (job #834443)
Cod sursa(job #834443)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("order.in");
ofstream out("order.out");
int arb[98000];
int n,p,s;
void build(int nod, int st, int dr)
{
if (st==dr)
{
arb[nod]=1;
return;
}
else
{
int mij=(st+dr)/2;
int fiu=2*nod;
build(fiu,st,mij);
build(fiu+1,mij+1,dr);
arb[nod]=arb[fiu]+arb[fiu+1];
}
}
void ask(int nod, int st, int dr)
{
if (st==dr)
{
arb[nod]=0;
out<<st<<' ';
}
else
{
int mij=(st+dr)/2;
int fs=2*nod;
int fd=2*nod+1;
if (arb[fs]>=p)
{
ask(fs,st,mij);
arb[nod]--;
}
else
{
p=p-arb[fs];
ask(fd,mij+1,dr);
arb[nod]--;
s=s+arb[nod]-arb[fd];
}
}
}
int main()
{
in>>n;
s=1;
build(1,1,n);
for (int i=1;i<=n;i++)
{
p=(s+i) % arb[1];
if (!p) p=arb[1];
s=0;
ask(1,1,n);
}
return 0;
}