Pagini recente » Cod sursa (job #268988) | Cod sursa (job #2528594) | Cod sursa (job #2749735) | Cod sursa (job #1820658) | Cod sursa (job #777649)
Cod sursa(job #777649)
#include<fstream>
using namespace std;
ifstream f("schi.in");
ofstream g("schi.out");
int n,i,val,poz,a[30005],ranking[30005],rez;
int tree[1<<16+1];
void update(int nod, int left, int right)
{if(left==right)
{tree[nod]=val;
return;}
int mij=(left+right)/2;
if(poz<=mij)
update(2*nod, left, mij);
else
update(2*nod+1, mij+1, right);
tree[nod]=tree[2*nod+1]+tree[2*nod];
}
void query(int nod, int left, int right)
{if(left==right)
{rez=left;
return;}
int mij=(left+right)/2;
if(val<=tree[2*nod])
query(2*nod,left,mij);
else
{val=val-tree[2*nod];
query(2*nod+1,mij+1,right);}
}
int main()
{f>>n;
for(i=1; i<=n; i++)
{poz=i;
val=1;
update(1,1,n);
f>>a[i];}
for(i=n; i>=1; i--)
{val=a[i];
query(1,1,n);
ranking[rez]=i;
poz=rez;
val=0;
update(1,1,n);
}
for(i=1; i<=n; i++)
g<<ranking[i]<<endl;
f.close();
g.close();
return 0;}