Cod sursa(job #1794960)

Utilizator Kln1000Ciobanu Bogdan Kln1000 Data 1 noiembrie 2016 21:05:24
Problema Order Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <fstream>
#include <vector>

std::ifstream f("order.in");
std::ofstream t("order.out");

int n,poz,val,v[100010];
std::vector <int> sol;

void update(int nod, int st, int dr){
    if (st==dr){v[nod]+=val;return;}
    int mid=(st+dr)>>1;
    if (poz<=mid) update(2*nod,st,mid);
    else update(2*nod+1,mid+1,dr);
    v[nod]=v[2*nod]+v[2*nod+1];
}

int query(int nod, int st, int dr){
    --v[nod];
    if (st==dr) return st;
    int mid=(st+dr)>>1;
    if (v[nod*2]>=val) return query(nod*2,st,mid);
    else {
        val-=v[nod*2];
        return query(nod*2+1,mid+1,dr);
    }
}

int main(){
    f>>n;
    val=1;
    for (int i=1; i<=n; ++i)
        poz=i,update(1,1,n);
    int pas=1;
    for (int i=1; i<=n; ++i){
        pas=(pas+i)%v[1];
        if (!pas) pas=v[1];
            val=pas;
        poz=query(1,1,n);
        sol.push_back(poz);
        --pas;
        if (!pas)
            pas=v[1];
    }
    for (auto i:sol)
        t<<i<<" ";
    return 0;
}