Cod sursa(job #867929)

Utilizator alexalghisiAlghisi Alessandro Paolo alexalghisi Data 30 ianuarie 2013 13:33:54
Problema Order Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <iostream>
#include <fstream>
using namespace std;

int arb[120006],poz,pasi,x=1,nr;

ifstream f("order.in");
ofstream g("order.out");

void update(int nod,int left,int right)
{
    if(left==right)
    {
        arb[nod]=1;
        return;
    }
    int mij=(left+right)/2;
    if(poz<=mij) update(2*nod,left,mij);
        else update(2*nod+1,mij+1,right);

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

void caut(int nod,int left,int right)
{
    if(left==right)
    {
        g<<left<<" ";
        arb[nod]=0;
        return;
    }

    int mij=(left+right)/2;
    if( nr<=arb[2*nod] )
        caut(2*nod,left,mij);
        else
        {
            nr-=arb[2*nod];
            caut(2*nod+1,mij+1,right);
        }
    arb[nod]=arb[2*nod]+arb[2*nod+1];
}

int main()
{
    int n;
    f>>n;
    for(int i=1;i<=n;++i)
    {
        poz=i;
        update(1,1,n);
    }

    for(int i=1;i<=n;++i)
    {
        x=(x+i)%arb[1];
        if(x==0) x=arb[1];
        nr=x;
        caut(1,1,n);
        --x;
    }
    return 0;
}