Pagini recente » Rating Matei Gardus (Storm_FireFox1) | Cod sursa (job #827153) | Cod sursa (job #2286946) | Cod sursa (job #1536514) | Cod sursa (job #2701426)
#include <bits/stdc++.h>
using namespace std;
ifstream f ("order.in");
ofstream g ("order.out");
int AIB[100005];
int val;
int n;
void update(int poz, int val)
{
while(poz<=n)
{
AIB[poz]+=val;
poz+=(poz & (-poz));
}
}
int query(int poz)
{
int sum=0;
while(poz>0)
{
sum+=AIB[poz];
poz-=(poz & (-poz));
}
return sum;
}
int cb(int x, int st, int dr)
{
int scad=query(st-1);
int mij=(st+dr)/2;
int sol=-1;
while(st<=dr)
{
if(query(mij)-scad==x)
{
sol=mij;
dr=mij-1;
}
else if(query(mij)-scad<x)
st=mij+1;
else
dr=mij-1;
mij=(st+dr)/2;
}
return sol;
}
int sol,k;
int main()
{
f>>n;
for(int i=1; i<=n; ++i)
update(i, 1);
int pozitie=1;
int s;
for(int i=1; i<=n; ++i)
{
s=query(n)-query(pozitie);
if(s>=i)
{
int sol = cb(i,pozitie+1,n);
g<<sol<<" ";
pozitie = sol;
update(sol,-1);
}
else
{
int aj=i;
aj-=s;
k = aj%(n-i+1);
if(!k)
k = n-i+1;
int sol = cb(k,1,n);
g<<sol<<" ";
pozitie = sol;
update(sol,-1);
}
}
return 0;
}