Pagini recente » Cod sursa (job #2172726) | Cod sursa (job #2762790) | Cod sursa (job #2515877) | Cod sursa (job #2088534) | Cod sursa (job #2309652)
#include<fstream>
#define Maxim (1LL<<31)-1
using namespace std;
ifstream cin("algsort.in");
ofstream cout("algsort.out");
int n,v[500005];
int Min[(2<<20)+5];
int SegmentTree(int node,int left,int right){
if(left==right){
Min[node]=v[left];
return Min[node];
}
int middle=(left+right)/2;
int LeftSubTree=SegmentTree(2*node,left,middle);
int RightSubTree=SegmentTree(2*node+1,middle+1,right);
Min[node]=min(LeftSubTree,RightSubTree);
return Min[node];
}
void Update(int node,int left,int right,int findvalue,int value){
if(Min[node]==findvalue){
if(left==right){
Min[node]=value;
return ;
}
int middle=(left+right)/2;
if(Min[2*node]==findvalue) Update(2*node,left,middle,findvalue,value);
else if(Min[2*node+1]==findvalue) Update(2*node+1,middle+1,right,findvalue,value);
Min[node]=min(Min[2*node],Min[2*node+1]);
return ;
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++)
cin>>v[i];
SegmentTree(1,1,n);
for(int i=1;i<=n;i++){
cout<<Min[1]<<' ';
Update(1,1,n,Min[1],Maxim);
}
}