Cod sursa(job #1947981)

Utilizator KusikaPasa Corneliu Kusika Data 31 martie 2017 16:13:50
Problema Order Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include <bits/stdc++.h>
using namespace std;

int n;
int t[30003];

void update(int idx) { for (;idx <= n; idx += (idx&-idx)) t[idx]++; }
int get(int idx) {
    int res = 0;
    for (;idx;idx -= (idx&-idx)) res += t[idx];
    return res;
}

int main() {
    freopen("order.in","r",stdin);
    freopen("order.out","w",stdout);
    cin >> n;
    int x = 2;
    for (int i = 1, cn = n; i <= n; i++, cn--) {
        x = (x - 1 + i) % cn;
        if (x == 0) x = cn;
        int lo = 1, hi = n;
        while (lo < hi) {
            int mi = (lo + hi) / 2;
            if (mi - get(mi) < x) lo = mi+1;
            else hi = mi;
        }
        update(lo);
        cout << hi << " ";
    }
}