Pagini recente » Cod sursa (job #1659692) | Cod sursa (job #445783) | Cod sursa (job #328287) | Cod sursa (job #2926267) | Cod sursa (job #1038214)
#include<fstream>
using namespace std;
ifstream in("farfurii.in");
ofstream out("farfurii.out");
const int Nmax = 100000;
long long N,K,ch[Nmax];
long long A[18*Nmax];
void Build(int st,int dr,int i){
A[i]=dr-st+1;
if(st!=dr){
int mij=(st+dr)/2;
Build(st,mij,2*i);
Build(mij+1,dr,2*i+1);
}
}
int Query(int val,int st,int dr,int i){
//out<<st<<' '<<dr<<' '<<val<<'\n';
if(st==dr) return st;
int mij=(st+dr)/2;
if( val <= A[2*i]) return Query(val,st,mij,2*i);
return Query(val-A[2*i],mij+1,dr,2*i+1);
}
void Update(int wh,int st,int dr,int i){
A[i]--;
if(st!=dr){
int mij=(st+dr)/2;
if( wh <= mij) Update(wh,st,mij,2*i);
else Update(wh,mij+1,dr,2*i+1);
}
}
int Detect(int i){
int ind = Query(i,1,N,1);
Update(ind,1,N,1);
return ind;
}
int main(){
in>>N>>K;
for(int i=1;i<=N;i++){
if( K-i >= 0 ){
ch[N-i] = i;
K-=i;
}
else{
ch[N-i]= K;
K=0;
}
}
for(int i=1;i<=N;i++) ch[i]++;
Build(1,N,1);
for(int i=1;i<=N;i++){
out<<Detect(ch[i])<<' ';
}
return 0;
}