Pagini recente » Cod sursa (job #3150261) | Cod sursa (job #1348897) | Statisticile problemei Galerie | Cod sursa (job #1594414) | Cod sursa (job #2021072)
#include <fstream>
#define ub(x) (x&(-x))
using namespace std;
ifstream f ("order.in");
ofstream g ("order.out");
int n,y,k,aib[30005],i,j;
void scad (int poz)
{
for (int i=poz;i<=n;i+=ub(i))
aib[i]--;
}
int sum(int poz)
{
int s=0;
for (int i=poz;i>0;i-=ub(i)) {
s=s+aib[i];
}
return s;
}
int cautbin(int val)
{
int st=1,dr=n,mn=n+1,mij;
while(st<=dr)
{
mij=(st+dr)/2;
if(sum(mij)==val&&mij<mn) {mn=mij;dr=mij-1;}
else if(sum(mij)>val) dr=mij-1;
else st=mij+1;
}
return mn;
}
int main()
{
f>>n;
for(i=1;i<=n;i++)
{
aib[i]=ub(i);
}
j=2;
k=n;
for(i=1;i<=n;i++)
{
y=cautbin(j);
scad(y);
g<<y<<" ";
k--;
j=j+i;
if(k)
{
if(j%k==0) j=k;
else j=j%k;
}
}
return 0;
}