Cod sursa(job #2130296)

Utilizator mateibanuBanu Matei Costin mateibanu Data 13 februarie 2018 16:33:19
Problema Order Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <bits/stdc++.h>

using namespace std;

int ai[120010],n,f;

void build(int o, int a, int b){
    if (a==b) {ai[o]=1;return;}
    int m=(a+b)/2;
    build(o*2,a,m);
    build(o*2+1,m+1,b);
    ai[o]=ai[o*2]+ai[o*2+1];
}

void cauta(int o, int a, int b, int val){
    if (a==b) {
        printf("%d ",a);
        ai[o]=0;
        return;
    }

    int m=(a+b)/2;
    if (val<=ai[o*2]) cauta(o*2,a,m,val);
    else cauta(o*2+1,m+1,b,val-ai[o*2]);
    ai[o]=ai[o*2]+ai[o*2+1];
}

int main()
{
    freopen("order.in","r",stdin);
    freopen("order.out","w",stdout);

    scanf("%d",&n);

    build(1,1,n);

    int i,x=1, nr=n;
    f=0;
    for (i=1;i<=n;i++){
        x+=i;
        x%=nr;
        if (x==0) x=nr;
        nr--;
        cauta(1,1,n,x);
        x--;
    }
    return 0;
}