Cod sursa(job #3267328)

Utilizator cristian46290Petre Cristian cristian46290 Data 11 ianuarie 2025 10:58:37
Problema Order Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream f("schi.in");
ofstream g("schi.out");

const int nMax = 3e4 + 5;

int n;
int a[nMax], aib[nMax], rezV[nMax];

void update(int x,int val)
{
    for (int i = x;i <= n;i+=i&-i)aib[i] += val;
}

int sum(int x)
{
    int rez = 0;
    for (int i = x;i >= 1;i-=i&-i)rez += aib[i];
    return rez;
}

int cb(int s,int st)
{
    int dr = n;
    int rez = nMax;
    int cst = st;
    int mij;
    while(st <= dr){
        mij = (st + dr) / 2;
        if (sum(mij) - sum(cst-1) >= s)dr = mij - 1,rez = min(mij,rez);
        else if (sum(mij) - sum(cst-1) < s)st = mij + 1;
    }
    return rez;
}

int main()
{
    f >> n;
    for (int i = 1;i <= n;i++){
        update(i,1);
    }
    int cj = 2;
    int ceva = n;
    for (int i = 1;i <= n;i++){
        cj = (cj + i - 1) % ceva;
        if (cj == 0)cj = ceva;
        rezV[i] = cb(cj,1);
        update(rezV[i],-1);
        ceva--;
    }
    for (int i = 1;i <= n;i++)g << rezV[i] << " ";
}