Pagini recente » Borderou de evaluare (job #870497) | Borderou de evaluare (job #1634486) | Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #3320055)
//
// main.cpp
// order
//
// Created by Andrada Minca on 04.11.2025.
//
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("order.in");
ofstream cout("order.out");
vector<int> aib;
int lsb(int x)
{
return (x&(-x));
}
void update(int x,int add)
{
for(int i=x;i<aib.size();i+=lsb(i))
{
aib[i]+=add;
}
}
long long query(int x)
{
long long sum=0;
for(int i=x;i>0;i-=lsb(i))
{
sum+=aib[i];
}
return sum;
}
int bs(long long s)
{
int ans=0;
long long sum=0;
for(int pas=(1<<17);pas>0;pas/=2)
{
if(ans+pas+1<aib.size()&&sum+aib[ans+pas]<s)
{
ans+=pas;
sum+=aib[ans];
}
}
if(query(ans+1)==s)
{
return ans+1;
}
else return -1;
}
int main()
{
int n;
cin>>n;
aib.resize(n+1);
for(int i=1;i<=n;i++)
{
update(i,1);
}
int ind=1,crt=1;
for(int i=1;i<=n;i++)
{
ind+=i;
ind%=(n-i+1);
if(ind==0)ind=n-i+1;
crt=bs(ind);
update(crt,-1);
cout<<crt<<" ";
ind--;
}
return 0;
}