Pagini recente » Borderou de evaluare (job #2116749) | Cod sursa (job #179673) | Cod sursa (job #859678) | Cod sursa (job #1335375) | Cod sursa (job #169074)
Cod sursa(job #169074)
#include<fstream>
#include<iostream>
using namespace std;
ifstream fin("farfurii.in");
ofstream fout("farfurii.out");
#define N 100000
int a[N*5],sum;
int n,k,i;
void use(int,int,int);
int main()
{
fin>>n>>k;
for(i=1;i<=n;i++)
{
sum=max(1,(int)(k-(long long)(n-i)*(n-i-1)/2)+1);
if(sum>1) k-=sum-1;
//cout<<sum<<'\n';
use(1,1,n);
}
fout<<'\n';
return 0;
}
void use(int k,int i,int j)
{
//if((::i)==n) cout<<k<<' '<<a[k]<<' '<<i<<' '<<j<<' '<<sum<<'\n';
if(i==j)
{
sum-=!a[k];
if(!sum)
{
fout<<i<<' ';
a[k]=1;
}
return;
}
int mij=(i+j)/2;
if(sum>j-i+1-a[k])
sum-=j-i+1-a[k];
else
{
use(2*k,i,mij);
if(sum) use(2*k+1,mij+1,j);
a[k]=a[2*k]+a[2*k+1];
}
}