Pagini recente » Cod sursa (job #1798070) | Cod sursa (job #1886141) | Borderou de evaluare (job #2768045) | Cod sursa (job #2928557) | Cod sursa (job #968983)
Cod sursa(job #968983)
#include <fstream>
#define MAXN 30005
using namespace std;
ifstream f("schi.in");
ofstream g("schi.out");
int n,v[MAXN],poz[MAXN],aib[MAXN],x,st,dr,mij,qur;
void update(int a);
int query(int a);
int main()
{
int i;
f>>n;
for(i=1;i<=n;i++)
f>>v[i];
for(i=1;i<=n;i++)
aib[i]=(i&(-i));
for(i=n;i>=1;i--){
x=v[i];
st=1;dr=n;
while(1){
mij=(st+dr)/2;
qur=query(mij);
if(qur<x)
st=mij+1;
else{
if(qur==x&&!poz[mij])
break;
dr=mij-1;}}
poz[mij]=i;
update(mij);}
for(i=1;i<=n;i++)
g<<poz[i]<<'\n';
f.close();
g.close();
return 0;
}
void update(int a){
for(a;a<=n;a+=(a&(-a)))
aib[a]--;}
int query(int a){
int S=0;
for(a;a>0;a-=(a&(-a)))
S+=aib[a];
return S;}