Cod sursa(job #855271)

Utilizator RamaStanciu Mara Rama Data 14 ianuarie 2013 20:27:00
Problema Order Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <stdio.h>

using namespace std;

int n,A[400010],node,mod=1,clue;

void insert(int nod,int st,int dr)
{
    int mid;
    if(st==dr)
    {
        A[nod]=clue;
        return;

    }
    else {
    mid=(st+dr)/2;
    if(node<=mid) insert(2*nod,st,mid);
        else insert(2*nod+1,mid+1,dr);
    A[nod]=A[2*nod]+A[2*nod+1];
}
}
void search(int nod,int st,int dr,int mod)
{
    int mid;
    if(st==dr) {node=st;return;}
    mid=(st+dr)/2;
    if(mod<=A[2*nod]) search(nod*2,st,mid,mod);
        else search(nod*2+1,mid+1,dr,mod-A[nod*2]);


}
int main()
{
    int j=0,i=0;
    FILE*f,*g;
    clue=1;
    f=fopen("order.in","r");
    g=fopen("order.out","w");
    fscanf(f,"%d",&n);
    for(i=1;i<=n;++i)
    {
        node=i;
        insert(1,1,n);
    }
    for(j=1;j<=n;++j)
    {
        mod=(mod+j)%A[1];
        if(mod==0) mod=A[1];
        search(1,1,n,mod);
        fprintf(g,"%d\n",node);
        clue=0;
        mod--;
        insert(1,1,n);
    }

    return 0;
}