Cod sursa(job #857078)

Utilizator RamaStanciu Mara Rama Data 17 ianuarie 2013 11:38:52
Problema Order Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <stdio.h>
 
using namespace std;
 
int n,A[66000],node,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;}
    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 j=0,i=0;
    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);
    }
    int mod=1;
    for(j=1;j<=n;j++)
    {
        mod=(mod+j+A[1])%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;
}