Cod sursa(job #2060229)

Utilizator patcasrarespatcas rares danut patcasrares Data 7 noiembrie 2017 23:34:12
Problema Order Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include<fstream>
#include<iostream>
#define DN 120005
using namespace std;
ifstream fin("order.in");
ofstream fout("order.out");
int n,r[DN],v,poz,e,m,l;
void update1(int nod,int st,int dr)
{
    if(st==dr)
    {
        r[nod]=v;
        return;
    }
    int mij=(st+dr)/2;
    if(poz<=mij)
        update1(2*nod,st,mij);
    else
        update1(2*nod+1,mij+1,dr);
    r[nod]=r[2*nod]+r[2*nod+1];
}
void query(int nod,int st,int dr)
{
    if(st==dr)
    {
        poz=st;
        fout<<st<<' ';
        r[nod]=0;
        return;
    }
    int mij=(st+dr)/2;
    if(r[2*nod]>=l)
        query(2*nod,st,mij);
    else
    {
        l-=r[2*nod];
        query(2*nod+1,mij+1,dr);
    }
    r[nod]=r[2*nod]+r[2*nod+1];
}
int main()
{
    fin>>n;
    for(int i=1;i<=n;i++)
    {
        poz=i;
        v=1;
        update1(1,1,n);
    }
    m=n+1;
    e=1;
    for(int i=1;i<=n;i++)
    {
        m--;
        e+=i;
        e%=m;
        if(e==0)
            e=m;
        l=e;
       // cout<<e<<'\n';
        query(1,1,n);
        e--;
    }
}