hdu1425 sort
2012-09-01 11:51
218 查看
用堆排序写的,可能优化的不是很好,加上输入外挂才没有超时
code:
code:
//从今天开始不再用宏定义 //采用松散的代码写法~~ #include <iostream> #include <algorithm> #include <cstdio> #include <vector> #include <cstring> using namespace std; void swap(int &a1,int &a2) { int tmp=a2; a2=a1; a1=tmp; } void max_heapfy(int A[],int i,int heap_size) { int l=i<<1; int r=i<<1|1; int largest; if(l<=heap_size && A[l]>A[i]) { largest=l; }else{ largest=i; } if(r<=heap_size && A[r]>A[largest]) { largest=r; } if(largest!=i) { swap(A[i],A[largest]); max_heapfy(A,largest,heap_size); } } void build_max_heap(int A[],int heap_size) { int i; for(i=heap_size/2;i>=1;i--) { max_heapfy(A,i,heap_size); } } void heap_sort(int A[],int len) { int i; build_max_heap(A,len); for(i=len;i>=2;i--) { swap(A[1],A[len]); len--; max_heapfy(A,1,len); } } inline bool scan_d(int &num) { char in;bool IsN=false; in=getchar(); if(in==EOF) return false; while(in!='-'&&(in<'0'||in>'9')) in=getchar(); if(in=='-') { IsN=true;num=0; } else num=in-'0'; while(in=getchar(),in>='0'&&in<='9') { num*=10,num+=in-'0'; } if(IsN) num=-num; return true; } int dat[1000010],n,m; int main() { int i; while(~scanf("%d%d",&n,&m)){ for(i=1;i<=n;i++) { scan_d(dat[i]); } heap_sort(dat,n); // for(i=n;i>=1;i--) // { // printf("%d ",dat[i]); // } for(i=n;i>n-m+1;i--) { printf("%d ",dat[i]); } printf("%d\n",dat[n-m+1]); } return 0; }
相关文章推荐
- HDU1425:sort
- hdu1425 sort (hash)
- HDU1425 sort【排序】
- HDU1425-sort
- HDU1425----sort
- HDU1425_sort
- HDU1425-sort
- hdu1425 sort(哈希表)
- HDU1425 <sort 快排>
- HDU1425 sort【水题】
- HDU1425:sort
- sort HDU1425 TLE?!
- HDU1425 sort
- HDU1425 sort 【STL堆排序】
- 理解Collections.sortL() 方法
- sort
- 泛型算法(find、count、sort、fill、unique、copy、lambda、迭代器)
- 排序 sort python
- JavaScript 数组(Array) sort 排序函数实现的简单高阶函数原理
- 148. Sort List