Cod sursa(job #2527267)

Utilizator mihaela.macarie01@yahoo.comMihaela Macarie [email protected] Data 19 ianuarie 2020 21:45:04
Problema Order Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream x("order.in");
ofstream y("order.out");

int n,m,i,pozi=2,poz,e,a[120202],val;

void update(int nod, int left, int right)
{
    if(left==right)
    {
        a[nod]=val;
        return;
    }
    int mij=(left+right)/2;
    if(poz<=mij)
        update(nod*2,left,mij);
    else
        update(nod*2+1,mij+1,right);
    a[nod]=a[nod*2]+a[nod*2+1];
}

void query(int nod, int start, int finish, int vall)
{
    if(start==finish)
    {
        e=start;
        return;
    }
    int mij=(start+finish)/2;
    if(a[nod*2]>=vall)
        query(nod*2,start,mij,vall);
    else
        query(nod*2+1,mij+1,finish,vall-a[nod*2]);
}

int main()
{
    x>>n;
    m=n;
    for(i=1;i<=n;i++)
    {
        poz=i;
        val=1;
        update(1,1,n);
    }
    for(i=1;i<=n;i++)
    {
        pozi=pozi%m;
        if(!pozi)
            pozi=m;
        query(1,1,n,pozi);
        y<<e<<" ";
        poz=e;
        val=0;
        update(1,1,n);
        pozi+=i;
        m--;
    }
    x.close();
    y.close();
    return 0;
}