Cod sursa(job #856187)

Utilizator BalcauIonutFMI-Balcau Ionut BalcauIonut Data 15 ianuarie 2013 23:58:21
Problema Order Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <fstream>
#include <iostream>
using namespace std;
 
int v[65537], s, p;
ifstream fin("order.in"); 
ofstream fout("order.out");
 
void build(int nod, int st, int dr)
{
    if (st == dr)
    {
        v[nod] = 1;
        return;
    }
     
    int m = (st+dr)>>1, f = nod<<1;
    build(f, st, m);
    build(f+1, m+1, dr);
    v[nod] = v[f] + v[f+1];
}
 
void del(int nod, int st, int dr)
{
    if (st == dr)
    {
        v[nod] = 0;
        fout<<st<<" ";
        return;
    }
     
    int m = (st+dr)>>1, f = nod<<1;
    if (s <= v[f])
    {
        del(f, st, m);
        --v[nod];
    }
    else
    {
        s -= v[f];
        del(f+1, m+1, dr);
        --v[nod];
        p += v[f];
    }
}
 
int main()
{
    int n, i;
    fin>>n;
    build(1, 1, n);
     
    p = 1;
    for (i=1;v[1];++i)
    {
        s = (p+i)%v[1];
        if (!s) s = v[1];
        p = 0;
        del(1, 1, n);
    }
}