Cod sursa(job #2902275)

Utilizator iioaaana777Ghergu Ioana iioaaana777 Data 15 mai 2022 23:28:00
Problema Order Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <fstream>
#define NMAX 30004
using namespace std;
ifstream fin("order.in");
ofstream fout("order.out");

int N, aint[4 * NMAX], copil = 2, k;

void create(int n, int left, int right)
{
    aint[n] = right - left + 1;
    if(left == right)
        return;

    create(2 * n, left, (left + right) / 2);
    create(2 * n + 1, (left + right) / 2 + 1, right);
}

void update(int n, int left, int right, int copil) {

    if(left == right)
    {
        aint[n] = 0;
        fout<<left<<" ";
        return;
    }

    if(copil <= aint[2 * n])
        update(2 * n, left, (left + right) / 2, copil);
    else
        update(2 * n + 1, (left + right) / 2 + 1, right, copil - aint[2 * n]);

    aint[n] = aint[2 * n] + aint[2 * n + 1];
}

int nextIndex()
{
    k ++;
    copil = (copil + k - 1) % aint[1];

    if(!copil)
        copil = aint[1];

    return copil;
}

int main()
{
    fin>>N;
    create(1, 1, N);

    while(aint[1])
        update(1, 1, N, nextIndex());

    return 0;
}