Pagini recente » Cod sursa (job #2611111) | Cod sursa (job #3216647) | Cod sursa (job #1116994) | Cod sursa (job #2345411) | Cod sursa (job #3268908)
#include <bits/stdc++.h>
using namespace std;
ifstream f("schi.in");
ofstream g("schi.out");
int n,i,x;
vector<int>a,v,r;
void add(int ind,int x) {
for(int i=ind;i<=n;i+=(i&(-i)))
a[i]+=x;
}
int sum(int ind) {
int s=0;
for(int i=ind;i>=1;i-=(i&(-i)))
s+=a[i];
return s;
}
int cb(int x) {
int st=1,dr=n,poz=-1,mij,nr;
while(st<=dr) {
mij=(st+dr)/2;
nr=sum(mij);
if(x>nr)
st=mij+1;
else if(nr>x)
dr=mij-1;
else {
poz=mij;
dr=mij-1;
}
}
return poz;
}
int main() {
f>>n;
v.resize(n+1);
a.resize(n+1);
r.resize(n+1);
for(i=1;i<=n;i++) {
f>>v[i];
add(i,1);
}
for(i=n;i>=1;i--) {
x=cb(v[i]);
r[x]=i;
add(x,-1);
}
for(i=1;i<=n;i++)
g<<r[i]<<'\n';
return 0;
}