Cod sursa(job #2751152)

Utilizator VladCaloVlad Calomfirescu VladCalo Data 14 mai 2021 13:29:15
Problema Order Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.73 kb
//
//  main.cpp
//  order
//
//  Created by Vlad Calomfirescu on 14.05.2021.
//

#include <iostream>
#include <fstream>
using namespace std;
#define MAX 16

ifstream fin("order.in");
ofstream fout("order.out");

int a[3000],n,k,k1,pos,rs;
void update(int idx, int val){
    while(idx<=n){
        a[idx]+=val;
        idx+=idx&(-idx);
    }
}
void find(){
    for(int h=MAX;0<=h;h--){
      if(k1+(1<<h)<n){
        if(rs+a[k1+(1<<h)]<pos){
          rs+=a[k1+(1<<h)];
          k1+=(1<<h);
        }
      }
    }
}
int main(){

  fin>>n;
  for(int i=1;i<=n;i++)
    update(i,1);
  k=2;
  for(int i=1;i<=n;i++){
    pos=(k+i-2)%(n-i+1)+1;
    rs=0;
    k1=0;
    find();
    k1++;
    update(k1,-1);
    fout<<k1<<" ";
    k=pos;
  }
  return 0;
}