Cod sursa(job #3334432)

Utilizator Zeno1789Zeno Ciuca Zeno1789 Data 17 ianuarie 2026 16:32:34
Problema Order Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <fstream>
using namespace std;

ifstream cin ("order.in");
ofstream cout ("order.out");

int n;
int aib[30005];

void update(int poz,int val) {
    while (poz<=n) {
        aib[poz]+=val;
        poz+=poz & (-poz);
    }
}

int query(int poz) {
    int sum=0;
    while (poz>0) {
        sum+=aib[poz];
        poz-=poz & (-poz);
    }
    return sum;
} 

int main() {
    cin>>n;
    for (int i=1; i<=n; i++) {
        update(i,1);
    }
    int pozitie=1;
    for (int i=1; i<=n; i++) {
        int cnt=(pozitie+i)%(n-i+1);
        if (cnt==0) cnt=n-i+1;
        int l=1,r=n,ans=0;
        while (l<=r) {
            int mid=(l+r)/2;
            if (query(mid)>=cnt) {r=mid-1; ans=mid;}
            else if (query(mid)<cnt) l=mid+1;
        }
        cout<<ans<<' ';
        update(ans,-1);
        pozitie=cnt-1;
    }
}