Pagini recente » Cod sursa (job #2798510) | Cod sursa (job #2161020) | Cod sursa (job #305581) | Cod sursa (job #2755274) | Cod sursa (job #2397108)
#include <iostream>
#include <cstdio>
#define N 30005
using namespace std;
int n, v[N];
pair<int,int> arbint[4*N];
pair<int,int> maxPair(pair<int,int> a, pair<int,int> b){
if(a.first<b.first)
return a;
if(b.first<a.first)
return b;
if(a.second>b.second)
return a;
return b;
}
void construieste(int st = 1, int dr = n, int pos = 1){
if(st==dr){
arbint[pos] = {v[st],st};
return ;
}
int mij = (st+dr)/2;
construieste(st,mij,2*pos);
construieste(mij+1,dr,2*pos+1);
arbint[pos] = maxPair(arbint[2*pos], arbint[2*pos+1]);
}
void actualizareNod(int k, int st = 1, int dr = n, int pos = 1){
if(st==dr){
arbint[pos].first = N;
return ;
}
int mij = (st+dr)/2;
if(k<=mij)
actualizareNod(k,st,mij,2*pos);
else
actualizareNod(k,mij+1,dr,2*pos+1);
arbint[pos] = maxPair(arbint[2*pos], arbint[2*pos+1]);
}
int main()
{
freopen("schi.in","r",stdin);
freopen("schi.out","w",stdout);
scanf("%d", &n);
for(int i=1;i<=n;++i)
scanf("%d", &v[i]);
construieste();
for(int i=1;i<n;++i){
int k = arbint[1].second;
cout<<k<<"\n";
actualizareNod(k);
}
cout<<arbint[1].second;
return 0;
}