Pagini recente » Cod sursa (job #2962041) | Cod sursa (job #358549) | Cod sursa (job #1156421) | Cod sursa (job #902087) | Cod sursa (job #908656)
Cod sursa(job #908656)
#include<cstdio>
#define NMAX 30005
#define lsb(x) x&(-x)
FILE *f=fopen("order.in","r");
FILE *g=fopen("order.out","w");
using namespace std;
int AIB[NMAX],N;
void Update(int nod,int val)
{
for(;nod<=N;nod+=lsb(nod))
AIB[nod]+=val;
}
int Query(int nod)
{
int numb=0;
for(;nod;nod-=lsb(nod))
numb+=AIB[nod];
return numb;
}
int bs(int val)
{
int left=1,right=N,mid;
while(left <= right)
{
mid=(left+right)>>1;
int ok=Query(mid);
if( ok == val )
return mid;
if(ok < val)
left=mid+1;
else
right=mid-1;
}
return 0;
}
int main()
{
int a=1,nr;
fscanf(f,"%d",&N);
for(int i(1); i <= N; i++ )
Update(i,1);
nr=N;
for(int i(1); i <= N; ++i)
{
a+=i;
a%=nr;
if(a==0)
a=nr;
fprintf(g,"%d ",bs(a));
Update(bs(a),-1);
a--;
nr--;
}
fclose(f);
fclose(f);
return 0;
}