Pagini recente » Cod sursa (job #1543982) | Cod sursa (job #330623) | Cod sursa (job #796917) | Cod sursa (job #3183665) | Cod sursa (job #3235137)
#include <fstream>
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int n,x,p,nr[30005],v[120005];
pair <int,int> rsp[30005];
void update(int poz,int x)
{
poz=poz+p-1;
v[poz]=x;
while (poz!=1)
{
poz/=2;
v[poz]=v[poz*2]+v[poz*2+1];
}
}
int query(int a,int b,int st,int dr,int val,int index)
{
if (a==b)
{
v[index]=0;
return a;
}
int r;
if (val>v[index*2])
r=query((a+b)/2+1,b,st,dr,val-v[index*2],index*2+1);
else
r=query(a,(a+b)/2,st,dr,val,index*2);
v[index]=v[index*2]+v[index*2+1];
return r;
}
int main()
{
ifstream f ("schi.in");
ofstream g ("schi.out");
f>>n;
p=1;
while (p<n)
p*=2;
for (int i=1; i<=n; i++)
{
f>>nr[i];
update(i,1);
}
for (int i=n; i>=1; i--)
{
rsp[i].first=query(1,n,1,n,nr[i],1);
rsp[i].second=i;
}
sort(rsp+1,rsp+n+1);
for (int i=1;i<=n;i++)
g<<rsp[i].second<<'\n';
}