Cod sursa(job #2303697)

Utilizator ciutanpCiuta Andrei Calin ciutanp Data 16 decembrie 2018 19:20:34
Problema Order Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.86 kb
#include<bits/stdc++.h>
using namespace std;
ifstream f("order.in");
ofstream g("order.out");
int Arb[30000*4+250];
int n;
int urm,actual=2;

void Up(int node,int st,int dr)
{
    if(st==dr)
    {
        Arb[node]=1;
        return;
    }
    int mij=(st+dr)/2;
    Up(node*2,st,mij);
    Up(node*2+1,mij+1,dr);
    Arb[node]=Arb[node*2]+Arb[node*2+1];
}

int Cauta(int node,int st,int dr,int cat)
{
    Arb[node]--;
    if(st==dr)
    {
        return dr;
    }
    int mij=(st+dr)/2;
    if(cat<=Arb[node*2])
        return Cauta(node*2,st,mij,cat);
    else
        return Cauta(node*2+1,mij+1,dr,cat-Arb[2*node]);
}

int main()
{
    f>>n;
    Up(1,1,n);
    for(int i=1;i<=n;++i)
    {
        urm=(i+actual-1)%Arb[1];
        if(urm==0)
            urm=Arb[1];
        g<<Cauta(1,1,n,urm)<<' ';
        actual=urm;
    }
}