Cod sursa(job #855242)

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

using namespace std;

int n,A[400010],node,clue;

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

    }
    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;}
        else
        {
            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 mod=1,j,i;
    FILE*f,*g;
    f=fopen("order.in","r");
    g=fopen("order.out","w");
    fscanf(f,"%d",&n);
    for(i=1;i<=n;i++)
    {
        node=i;
        clue=1;
        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;
}