CSES - Shared codeLink to this code: https://cses.fi/paste/179d02bb2f13c8de44491c/
#include<bits/stdc++.h>
using namespace std;
long long bit[200005],n;
long long ask(long long p)
{
    long long sm=0;
    while(p>0)
    {
        sm+=bit[p];
        p-=(p&-p);
    }
    return sm;
}
void update(long long p,int pp)
{
    while(p<=n)
    {
        bit[p]+=pp;
        p+=(p&-p);
    }
}
long long query(long long l,long long r)
{
    return ask(r)-ask(l-1);
}
int main()
{
    long long k,i,j,p,ind=0,curk;
    cin>>n>>k;
    k++;
    for(i=1; i<=n; i++)
    {
        update(i,1);
    }
    vector<long long>v;
    long long nn=n;
    while(v.size()<n)
    {
        curk=k%nn;

        if(curk==0)
        {
            curk=nn;
        }
        long long can=query(ind+1,n);
        if(can<curk)
        {
            curk-=can;
            ind=0;
        }
        long long l,r,mid,ans;
        l=ind+1,r=n;
        while(l<=r)
        {
            mid=(l+r)/2;
            long long aa=query(ind+1,mid);

            if(aa<curk)
            {
                l=mid+1;
            }
            else
            {
                ans=mid;
                r=mid-1;
            }
        }
        v.push_back(ans);
        ind=ans;
        update(ans,-1);
        if(ind==n)ind=0;
        nn--;

    }
    for(auto t:v)cout<<t<<" ";

}