Pagini recente » Cod sursa (job #667199) | Cod sursa (job #1875051) | Cod sursa (job #359893) | Cod sursa (job #2148619) | Cod sursa (job #3267149)
#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 = 1,dr = n;
int rez = nMax;
int mij;
while(st <= dr){
mij = (st + dr) / 2;
if (sum(mij) > s)dr = mij - 1;
else if (sum(mij) < s)st = mij + 1;
else{
rez = min(mij,rez);
dr = mij - 1;
}
}
return rez;
}
int main()
{
f >> n;
for (int i = 1;i <= n;i++){
f >> a[i];
update(i,1);
}
for (int i = n;i >= 1;i--){
int ceva = cb(a[i]);
rezV[ceva] = i;
update(ceva,-1);
}
for (int i = 1;i <= n;i++)g << rezV[i] << '\n';
}