Pagini recente » Cod sursa (job #1922174) | Cod sursa (job #2310224) | Cod sursa (job #999518) | Cod sursa (job #857299) | Cod sursa (job #727942)
Cod sursa(job #727942)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("order.in");
ofstream fout("order.out");
#define MAXN 30005
int n,m,i,tura,j,k,arb[4*MAXN],poz;
void init(int nod, int st, int dr) {
if (st<dr) {
arb[nod]=dr-st+1;
}
if (st==dr) arb[nod]=st;
if (st<dr) {
int mij=(st+dr)>>1;
if (st<=mij) init(nod*2,st,mij);
if (mij<dr) init(nod*2+1,mij+1,dr);
}
}
int elim(int nod, int st, int dr, int poz) {
if ( (st==dr)) {
int rez=arb[nod];
arb[nod]=0;
return rez;
}
else if (st<dr) {
arb[nod]--;
int mij=(st+dr)>>1;
int ls,ld;
if ( (st==mij) && (arb[nod*2]>0) ) ls=1; else ls=arb[nod*2];
if (dr==mij+1) ld=1; else ld=arb[nod*2+1];
if (poz<=ls) return elim(nod*2,st,mij,poz);
else if (mij+1<=dr) return elim(nod*2+1,mij+1,dr,poz-ls);
}
return -1;
}
int main() {
fin>>n;
init(1,1,n);
k=n;
i=0;
tura=1;
/*for(i=0;i<=15;i++) {
cout<<"arb["<<i<<"]="<<arb[i]<<"\n";
}*/
i=1;
while (k>0) {
i+=tura;
i%=k;
if (i==0) i=k;
m=elim(1,1,n,i);
/*cout<<"\n\n-----TURA "<<tura<<" >>sterge pozitia "<<i<<"\n";
for(j=0;j<=15;j++) {
cout<<"arb["<<j<<"]="<<arb[j]<<"\n";
}*/
fout<<m<<" ";
i--;
k--;
tura++;
}
/*cout<<"\n";
i=1;
k=n;
int rez[MAXN];
for(i=1;i<=n;i++) rez[i]=i;
for(tura=1;tura<=n;tura++) {
i+=tura;
i%=k; if (i==0) i=k;
k--;
cout<<rez[i]<<" ";
for(j=i;j<=n;j++) rez[j]=rez[j+1];
i--;
}*/
fout<<"\n";
fout.close();
return 0;
}