Pagini recente » Borderou de evaluare (job #207966) | Cod sursa (job #1494291) | Cod sursa (job #2111922) | Cod sursa (job #1371205) | Cod sursa (job #2092381)
#include <fstream>
#define ub(x) (x&(-x))
using namespace std;
int j,z,aib[30005],b[30005],n,y,k;
ifstream f("order.in");
ofstream g("order.out");
void scade(int poz)
{
int i;
for(i=poz; i<=n; i=i+ub(i))
{
aib[i]--;
}
}
int sum(int poz)
{
int S=0,i;
for(i=poz; i>0; i=i-ub(i))
{
S=S+aib[i];
}
return S;
}
int sebi(int val)
{
int st,dr,x=n,m;
st=1;
dr=n;
x=n+1;
while(st<=dr)
{
m=(st+dr)/2;
if(sum(m)==val && m<x)
{
x=m;
dr=m-1;
}
else if(sum(m)>val) dr=m-1;
else st=m+1;
}
return x;
}
int main()
{
f>>n;
for(j=1; j<=n; j++)
{
aib[j]=ub(j);
}
z=2;
k=n;
for(j=1; j<=n; j++)
{
y=sebi(z);
scade(y);
g<<y<<" ";
k--;
z=z+j;
if(k)
{
if(z%k==0) z=k;
else z=z%k;
}
}
return 0;
}