Pagini recente » Cod sursa (job #2233821) | Cod sursa (job #154659) | Cod sursa (job #2650812) | Cod sursa (job #1808803) | Cod sursa (job #1144241)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include<cstdio>
using namespace std;
const int NMAX = 30005;
int N,i,poz,len,aib[NMAX],l,r,m,sol,Q;
void Update(int poz,int val)
{
for(int i=poz;i<=N;i+=i&(-i)) aib[i]+=val;
}
int Query(int poz)
{
int ans=0;
for(int i=poz;i;i-=i&(-i)) ans+=aib[i];
return ans;
}
int main()
{
freopen("order.in","r",stdin);
freopen("order.out","w",stdout);
scanf("%d",&N);
for(i=1;i<=N;i++) Update(i,1);
for(i=1,poz=2;i<=N;i++)
{
len=N-i+1;
poz=(poz+i-1)%len;
if(!poz) poz=len;
l=1; r=N;
while(l<=r)
{
m=(l+r)/2; Q=Query(m);
if(Q<poz) l=m+1;
else if(Q>poz) r=m-1;
else {sol=m; r=m-1;}
}
printf("%d ",sol);
Update(sol,-1);
}
return 0;
}