Pagini recente » Cod sursa (job #2162458) | Cod sursa (job #1703559) | Cod sursa (job #1298616) | Cod sursa (job #2843425) | Cod sursa (job #3267328)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("schi.in");
ofstream g("schi.out");
const int nMax = 3e4 + 5;
int n;
int a[nMax], aib[nMax], rezV[nMax];
void update(int x,int val)
{
for (int i = x;i <= n;i+=i&-i)aib[i] += val;
}
int sum(int x)
{
int rez = 0;
for (int i = x;i >= 1;i-=i&-i)rez += aib[i];
return rez;
}
int cb(int s,int st)
{
int dr = n;
int rez = nMax;
int cst = st;
int mij;
while(st <= dr){
mij = (st + dr) / 2;
if (sum(mij) - sum(cst-1) >= s)dr = mij - 1,rez = min(mij,rez);
else if (sum(mij) - sum(cst-1) < s)st = mij + 1;
}
return rez;
}
int main()
{
f >> n;
for (int i = 1;i <= n;i++){
update(i,1);
}
int cj = 2;
int ceva = n;
for (int i = 1;i <= n;i++){
cj = (cj + i - 1) % ceva;
if (cj == 0)cj = ceva;
rezV[i] = cb(cj,1);
update(rezV[i],-1);
ceva--;
}
for (int i = 1;i <= n;i++)g << rezV[i] << " ";
}