Pagini recente » Cod sursa (job #792898) | Cod sursa (job #458173) | Cod sursa (job #208490) | Cod sursa (job #795865) | Cod sursa (job #3333826)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("schi.in");
ofstream fout("schi.out");
const int AMAX = 12e4+1, NMAX = 3e4+1;
int aint[AMAX], a[NMAX], rez[NMAX];
int n, l;
void update_pos(int nod, int l, int r, int pos, int val){
if(l==r){
aint[nod]=val;
rez[val]=l;
//cout<<l<<' '<<aint[nod]<<endl;
}
else{
int m=(l+r)/2;
if(pos<=m)
update_pos(2*nod, l, m, pos, val);
else
update_pos(2*nod+1, m+1, r, pos, val);
aint[nod]=max(aint[2*nod], aint[2*nod+1]);
}
}
void update(int nod, int l, int r, int val){
//cout<<"i "<<l<<' '<<r<<endl;
if(l==r){
aint[nod]++;
rez[aint[nod]]=l;
//cout<<l<<' '<<aint[nod]<<endl;
}
else{
int m=(l+r)/2;
//cout<<"aint "<<aint[2*nod]<<' '<<aint[2*nod+1]<<endl;
if(val<=aint[2*nod])
update(2*nod, l, m, val);
if(val<=aint[2*nod+1])
update(2*nod+1, m+1, r, val);
aint[nod]=max(aint[2*nod], aint[2*nod+1]);
}
}
int main(){
fin>>n;
for(int i=1;i<=n;i++){
fin>>l;
//cout<<endl;
//cout<<"UPDATE\n";
update(1, 1, n, l);
//cout<<"UPDATE_POS\n";
update_pos(1, 1, n, i, l);
}
for(int i=1;i<=n;i++){
fout<<rez[i]<<'\n';
}
return 0;
}