Cod sursa(job #2565339)

Utilizator CosminMorarMorar Cosmin Andrei CosminMorar Data 2 martie 2020 13:43:26
Problema Order Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("order.in");
ofstream fout("order.out");
int n, want = 2, turn;
int v[4 * 30000 + 100];

void create(int nod, int st, int dr) {
    v[nod] = dr - st + 1;

    if (st == dr)
        return;

    int mij = (st + dr) / 2;

    create(2 * nod, st, mij);
    create(2 * nod + 1, mij + 1, dr);
}

int genNextIndex() {
    turn++;
    want = (want + turn - 1) % v[1];
    if (!want)
        want = v[1];
    return want;
}

void update(int nod, int st, int dr, int want) {
    if (st == dr) {
        v[nod] = 0;
        fout << st << ' ';
        return;
    }

    int mij = (st + dr) / 2;

    if (want <= v[2 * nod])
        update(2 * nod, st, mij, want);
    else
        update(2 * nod + 1, mij + 1, dr, want - v[2 * nod]);

    v[nod] = v[2 * nod] + v[2 * nod + 1];
}

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

    while (v[1])
        update(1, 1, n, genNextIndex());
    return 0;
}