Pagini recente » Cod sursa (job #345927) | Cod sursa (job #795102) | Cod sursa (job #2719538) | Cod sursa (job #1096582) | Cod sursa (job #1159395)
#include<iostream>
#include<cstdio>
using namespace std;
int i, poz, suma[150000], a[100000], pos[150000];
void Modific(int nod, int left, int right)
{
if(left==right) {
suma[nod]=0;
pos[left]=i;
}
else
{
int mij=(left+right)/2;
if(poz<=suma[2*nod])
Modific(2*nod, left, mij);
else{
poz=poz-suma[2*nod];
Modific(2*nod+1, mij+1, right);}
suma[nod]=suma[2*nod]+suma[2*nod+1];
}
}
void Creare(int nod, int left, int right)
{
if(left==right) {
suma[nod]=1;
}
else
{
int mij=(left+right)/2;
if(i<=mij)
Creare(2*nod, left, mij);
else
Creare(2*nod+1, mij+1, right);
suma[nod]=suma[2*nod]+suma[2*nod+1];
}
}
int main()
{
FILE *fin, *fout;
fin=fopen("schi.in", "r");
fout=fopen("schi.out", "w");
int n;
fscanf(fin, "%d", &n);
for(i=1; i<=n; i++) {
Creare(1,1,n);
}
for(i=1; i<=n; i++) {
fscanf(fin, "%d", &a[i]);
}
for(i=n; i>=1; i--) {
poz=a[i];
Modific(1,1,n);
}
for(i=1; i<=n; i++)
fprintf(fout, "%d\n", pos[i]);
}