uestc data structure training f 秋实大哥与妹纸
2015-04-17 16:12
323 查看
内存限制是1500k,开始我用的分治法,O(n)的空间复杂度,O(nlgn)的时间复杂度,结果怎么都超时,看来还是要减小空间复杂度,后经胡巨巨提醒,发现了更好的解法.先用前一半的数据建立一个大根堆,再处理剩下的一半:如果比s[0]大,直接舍去,如果比s[0]小,直接替换掉s[0],再维护堆性质,这样到最后,堆顶的元素刚好是中位数。时间复杂度不变,空间复杂度一下子降到原来的一半,实在是太牛逼的算法了!
对基本数据结构的理解还是需要不断的强化
对基本数据结构的理解还是需要不断的强化
#include<cstdio> #include<algorithm> #define MAX 125010 using namespace std; int i,n,s[MAX],help; void heapify(int root){ if(root>n/4) return ; if(s[root]>=s[root*2+1]&&s[root]>=s[root*2+2]) return ; if(s[root*2+1]>s[root*2+2]){ swap(s[root],s[root*2+1]); heapify(root*2+1); } else{ swap(s[root],s[root*2+2]); heapify(root*2+2); } } void heap(){ for(i=n/4;i>=0;i--){ heapify(i); } } int main(){ scanf("%d",&n); for(i=0;i<=n/2;i++) scanf("%d",&s[i]); heap(); for(i=n/2+1;i<n;i++){ scanf("%d",&help); if(help<s[0]){ s[0]=help; heapify(0); } } if(n%2==1) printf("%.1lf\n",(double)s[0]); else printf("%.1lf\n",((double(s[0])+(double)max(s[1],s[2]))/2)); return 0; }
相关文章推荐
- UESTC_秋实大哥与妹纸 2015 UESTC Training for Data Structures<Problem F>
- uestc data structure n 秋实大哥与快餐店
- UESTC_秋实大哥与小朋友 2015 UESTC Training for Data Structures<Problem A>
- UESTC_秋实大哥与花 2015 UESTC Training for Data Structures<Problem B>
- UESTC_秋实大哥与快餐店 2015 UESTC Training for Data Structures<Problem C>
- UESTC_秋实大哥与战争 2015 UESTC Training for Data Structures<Problem D>
- UESTC_秋实大哥与家 2015 UESTC Training for Data Structures<Problem E>
- 2016 UESTC Training for Data Structures N - 秋实大哥搞算数 用栈处理表达式
- 2015 UESTC Training for Data Structures 秋实大哥下棋
- UESTC_秋实大哥去打工 2015 UESTC Training for Data Structures<Problem G>
- UESTC_秋实大哥打游戏 2015 UESTC Training for Data Structures<Problem H>
- UESTC_秋实大哥下棋 2015 UESTC Training for Data Structures<Problem I>
- uestc data structure n 秋实大哥搞算数
- 2016 UESTC Training for Data Structures N - 秋实大哥搞算数 CDOJ 1074 栈 表达式求值
- UESTC_秋实大哥与线段树 2015 UESTC Training for Data Structures<Problem M>
- uestc data structure D - 秋实大哥与战争
- UESTC_秋实大哥搞算数 2015 UESTC Training for Data Structures<Problem N>
- UESTC_秋实大哥带我飞 2015 UESTC Training for Graph Theory<Problem B>
- UESTC_秋实大哥与时空漫游 2015 UESTC Training for Graph Theory<Problem C>
- UESTC_秋实大哥掰手指 2015 UESTC Training for Dynamic Programming<Problem B>