Cod sursa(job #2147081)

Utilizator CammieCamelia Lazar Cammie Data 28 februarie 2018 13:58:19
Problema Order Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <fstream>

#define MAXN 30005

using namespace std;

ifstream fin("order.in");
ofstream fout("order.out");

int ait[MAXN * 4], N, NN;

inline void Build(int poz, int st, int dr) {
    if (st == dr) {
        ait[poz] = 1;
        return;
    }
    int mij = (st + dr) / 2;

    Build(poz * 2, st, mij);
    Build(poz * 2 + 1, mij + 1, dr);
    ait[poz] = ait[poz * 2] + ait[poz * 2 + 1];
}

inline void Read() {
    fin >> N;

    Build(1, 1, N);
}

inline void Update(int poz, int st, int dr, int val) {
    if (st == dr) {
        fout << st << " ";
        ait[poz] = 0;
        return;
    }
    int mij = (st + dr) / 2;

    if (val <= ait[poz * 2])
        Update(poz * 2, st, mij, val);
    else
        Update(poz * 2 + 1, mij + 1, dr, val - ait[poz * 2]);
    ait[poz] = ait[poz * 2] + ait[poz * 2 + 1];
 }

inline void Solve() {
    NN = N; int pas = 1;
    for (int i = 1; i <= N; i++) {
        pas += i; pas %= NN; Update(1, 1, N, pas); NN--; pas--;
    }
}

int main () {
    Read();
    Solve();

    fin.close(); fout.close(); return 0;
}