Pagini recente » Cod sursa (job #2060003) | Cod sursa (job #3266814) | Cod sursa (job #1420867) | Cod sursa (job #1226642) | Cod sursa (job #2090093)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("schi.in");
ofstream g("schi.out");
int n, v[30005], t[30005], fi[30005], idx[30008];
void citire ()
{
f>>n;
int i;
for(i=1;i<=n;++i)
{
f>>v[i];
t[i]=1;
idx[i]=i;
}
f.close();
}
void update (int j)
{
int i;
for(i=j;i<=n;++i)
idx[i]--;
}
int cautareBin(int val)
{
int li=1, ls=n, mid;
while(li<=ls)
{
mid=(li+ls)>>1;
if(idx[mid]==val && idx[mid-1]!=val)
return mid;
if(val>idx[mid]) li=mid+1;
else ls=mid-1;
}
return 0;
}
int main()
{ citire();
int i;
fi[v[n]]=n;
t[v[n]]=0;
update(v[n]);
for(i=n-1;i>=1;--i)
{
int j=1, nr=0;
/*while(nr<v[i] && j<=n)
{
if(t[j]==1) nr++;
if(nr<v[i]) j++;
}*/
j=cautareBin(v[i]);
update(j);
fi[j]=i;
t[j]=0;
}
for(i=1;i<=n;++i)
g<<fi[i]<<'\n';
g.close();
}