Pagini recente » Rezultatele filtrării | Rezultatele filtrării | Cod sursa (job #2648828) | Rezultatele filtrării | Cod sursa (job #2466880)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("test.in");
ofstream fout("test.out");
/*
#define cin fin
#define cout fout
*/
const int MAXN=4e4;
int arbore[MAXN*4];
int intLeft, intRight, val, pos, el;
int last, len, n;
void build(int left, int right, int nod)
{
arbore[nod]=1;
if(left==right)
return;
int mij=(left+right)/2;
build(left, mij, nod*2);
build(mij+1, right, nod*2+1);
}
void query(int left, int right, int nod)
{
if(intLeft<=left&&right<=intRight)
{
val+=arbore[left];
return;
}
int mij=(left+right)/2;
if(intLeft<=mij)
query(left, mij, 2*nod);
if(mij<intRight)
query(mij+1, right, 2*nod+1);
}
void update(int left, int right, int nod)
{
arbore[nod]--;
if(left==right)
{
el=left;
return;
}
int mij=(left+right)/2;
if(pos<=mij)
update(left, mij, 2*nod);
else
update(mij+1, right, 2*nod+1);
}
void print(int v[])
{
for(int i=1; i<=2*n; i++)
cout<<v[i]<<" ";
}
int main()
{
cin>>n;
build(1,n,1);
// print(arbore);
last=0;
for(int i=1; i<=n; i++)
{
val=0;
len=i;
intLeft=el+1;
intRight=n;
query(1,n,1);
if(val<len)
{
len-=val;
len%=n;
if(len==0)
len=n;
}
pos=len;
update(1,n,1);
cout<<el<<" ";
}
return 0;
}