标签:wrap lan ddl div cst script 等级 dev 时间
给定N(N≤500,000)和N个整数(较有序),将其排序后输出。
N和N个整数
N个整数(升序)
5
12 11 10 8 9
8 9 10 11 12
对于33%的数据 N≤10000
对于另外33%的数据 N≤100,000 0≤每个数≤1000
对于100%的数据 N≤500,000 0≤每个数≤2*10^9
代碼實現:
1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 int n,a,b,c,dp,ado,rec; 5 int heap[600000];//數組要開的大一些。 6 void put(int x){ 7 ++dp; 8 heap[dp]=x; 9 rec=dp; 10 while(rec>1){ 11 if(heap[rec]<heap[rec/2]){ 12 swap(heap[rec],heap[rec/2]); 13 rec/=2; 14 } 15 else break; 16 } 17 } 18 int get(){ 19 int d=1,e; 20 rec=heap[d]; 21 heap[d]=heap[dp]; 22 dp--; 23 while(d*2<=dp){ 24 if(heap[d*2]>heap[d*2+1]) c=d*2+1; 25 else c=d*2; 26 if(heap[d]>heap[c]){ 27 swap(heap[d],heap[c]); 28 d=c; 29 } 30 else break; 31 } 32 return rec; 33 } 34 int main(){ 35 cin>>n; 36 for(int i=1;i<=n;i++){ 37 cin>>a; 38 put(a); 39 } 40 for(int i=1;i<=n;i++) printf("%d ",get()); 41 return 0; 42 }
一個堆排的裸題。
标签:wrap lan ddl div cst script 等级 dev 时间
原文地址:http://www.cnblogs.com/J-william/p/6238877.html