Mai intai trebuie sa te autentifici.
Cod sursa(job #581714)
Utilizator | Data | 14 aprilie 2011 15:29:24 | |
---|---|---|---|
Problema | Schi | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.75 kb |
#include <fstream.h>
ifstream fin("schi.in");
ofstream fout("schi.out");
const int r=30001;
int n,v[4*r],i,x;
int s[r],sol[r];
void update (int poz, int ls, int ld) {
int h;
if (ls==ld)
{
v[poz]=1;
return;
}
h=(ls+ld)/2;
update(2*poz, ls, h);
update(2*poz+1, h+1, ld);
v[poz]=v[2*poz]+v[2*poz+1];
}
void query(int poz, int ls, int ld, int x) {
int h;
if (ls==ld)
{
sol[ls]=i;
v[poz]=0;
return;
}
h=(ls+ld)/2;
if (v[2*poz]>=x) query(2*poz, ls, h, x);
else query(2*poz+1, h+1, ld, x-v[2*poz]);
v[poz]=v[2*poz]+v[2*poz+1];
}
int main() {
fin>>n;
update(1,1,n);
for (i=1;i<=n;i++)
fin>>s[i];
for (i=n;i>=1;i--)
query(1,1,n,s[i]);
for (i=1;i<=n;i++)
fout<<sol[i]<<"\n";
return 0;
}