Cod sursa(job #2758253)

Utilizator MadalinaKopaczMadalina Kopacz MadalinaKopacz Data 9 iunie 2021 12:13:05
Problema Order Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <fstream>
using namespace std;
ifstream fin("order.in");
ofstream fout("order.out");

int n;
int AI[200005];

//https://www.geeksforgeeks.org/interval-tree/
void Updatare(int node, int l, int r, int pos)
{
    if (l == r)  { AI[node] = 0;  return;}
    int m = (l + r) / 2;
    if (pos <= m)   Updatare(node * 2, l, m, pos);
    else  Updatare(node * 2 + 1, m + 1, r, pos);
    AI[node] = A[node * 2] + A[node * 2 + 1];
}

int Query(int node, int l, int r, int k)
{
    if (l == r) return st;
    int m = (l + r) / 2;
    if (AI[2 * node] >= k) return Query(2 * node, st, mij, k);
    else return Query(2 * node + 1, m + 1, r, k - AI[2 * node]);
}

void Constructie(int node, int l, int r)
{
    if (l == r)   {AI[node] = 1; return;  }
    int m = (l + r) / 2;
    Constructie(2 * node, l, m);
    Constructie(2 * node + 1, m + 1, r);
    AI[node] = AI[2 * node] + AI[2 * node + 1];
}

int main()
{
    fin >> n;
    Constructie(1, 1, n);
    int pos = 2;
    for (int i = 1; i <= n; i++)
    {
        pos += (i - 1);
        while (pos > AI[1])
            pos -= AI[1];
        int q = Query(1, 1, n, pos);
        fout << q << " ";
        Updatare(1, 1, n, q);
    }
    return 0;
}