Pagini recente » Cod sursa (job #878217) | Cod sursa (job #1862216) | Cod sursa (job #2883178) | Cod sursa (job #2637248) | Cod sursa (job #2916249)
#include <fstream>
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ifstream in("farfurii.in");
ofstream out("farfurii.out");
ll t[400005],used[400005];
set<int> s;
void update(int nod,int l,int r,int poz,int val)
{
if(l==r)
{
t[nod]+=val;
return;
}
int m=(l+r)/2;
if(poz<=m)
update(2*nod,l,m,poz,val);
else
update(2*nod+1,m+1,r,poz,val);
t[nod]=t[2*nod]+t[2*nod+1];
}
int query(int nod,int l,int r,int a,int b)
{
if(a<=l && r<=b)
return t[nod];
int m=(l+r)/2,rl=0,rr=0;
if(a<=m)
rl=query(2*nod,l,m,a,b);
if(m<b)
rr=query(2*nod+1,m+1,r,a,b);
return rl+rr;
}
int main()
{
ll n,last=0;
ll k;
in>>n>>k;
for(int i=1;i<=n;i++)
{
if((n-i)*(n-i-1)/2>=k)
{
out<<i<<" ";
last=i;
}
else
break;
}
if(last<n)
{
ll l=last+2,r=n-1,val=0;
while(l<=r)
{
ll m=(l+r)/2;
if(m-last-1+(n-last-1)*(n-last-2)/2>=k)
val=m,r=m-1;
else
l=m+1;
}
if(val)
{
used[val]=true;
out<<val<<" ";
}
for(int i=n;i>last;i--)
{
if(!used[i])
out<<i<<" ";
}
}
return 0;
}