Pagini recente » Cod sursa (job #1384141) | Cod sursa (job #2298203)
#include <bits/stdc++.h>
using namespace std;
ifstream in("order.in");
ofstream out("order.out");
int n,aib[15005],poz=1;
int query(int p);
void update(int p,int x);
int cautbin(int st, int dr, int turn)
{
int fin,mij,detriment=query(st);
while (st<=dr)
{
mij=(st+dr)/2;
if (query(mij)-detriment<turn)st=mij+1;
else
{
fin=mij;
dr=mij-1;
}
}
return fin;
}
void solve(int turn)
{
int dr=query(n)-query(poz);
if (dr>turn)
{
poz=cautbin(poz,n,turn);
out<<poz<<" ";
update(poz,-1);
}
else
{
turn-=dr;
// cout<<turn<<" ";
if (turn>query(n))turn=turn%query(n);
// cout<<turn<<"\n";
poz=cautbin(0,n,turn);
out<<poz<<" ";
update (poz,-1);
}
}
void update(int p,int x)
{
for (;p<=n;p+=(p&(-p)))
aib[p]+=x;
}
int query(int p)
{
int s=0;
for (;p>0;p-=(p&(-p)))
s+=aib[p];
return s;
}
int main()
{int i;
in>>n;
for (i=1;i<=n;i++)update(i,1);
for (i=1;i<n;i++) solve(i);
out<<cautbin(0,n,1)<<"\n";
out.close();
in.close();
return 0;
}