Cod sursa(job #3134417)

Utilizator bobic.teona20Bobic Teona-Christiana bobic.teona20 Data 28 mai 2023 23:39:04
Problema Order Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <iostream>
#include <fstream>

using namespace std;
ifstream f("order.in");
ofstream g("order.out");
const int NMAX = 30000;
int aib[NMAX + 1];

void adauga(int i, int n, int x) {
    for (; i <= n; i += (i & -i))
        aib[i] += x;
}

void afiseaza(int n)
{
    int nr = 1, rezerva = n;
    for (int i = 1; i <= n; i++) {
        nr = ((nr + i - 1) % rezerva) + 1;
        int miscare = (1 << 14), pozitie = 0, sum = 0;
        while (miscare) {
            if (pozitie + miscare <= n && sum + aib[pozitie + miscare] < nr) {
                sum += aib[pozitie + miscare];
                pozitie += miscare;
            }
            miscare >>= 1;
        }
        rezerva--;
        nr--;
        adauga(pozitie + 1, n, -1);
        g << pozitie + 1 << " ";
    }
}

int main()
{
    int n;
    f >> n;
    for(int i = 1; i <= n; i++)
        adauga(i, n, 1);
    afiseaza(n);
    return 0;
}