博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
*[codility]CartesianSequence
阅读量:4328 次
发布时间:2019-06-06

本文共 958 字,大约阅读时间需要 3 分钟。

https://codility.com/programmers/challenges/upsilon2012

求笛卡尔树的高度,可以用单调栈来做。

维持一个单调递减的栈,每次进栈的时候记录下它之后有多少元素,就是以它为根的子树的高度。出栈的时候再更新一次供新进栈者使用。

int solution(vector
&A) { A.push_back(1000000001); // an element larger than any one in A int size = A.size(); vector
elem_stack; vector
ht_stack; int tailHt = 0; for (int i = 0; i < size; i++) { bool done = false; while (not done) { if (elem_stack.size() == 0 || elem_stack.back() > A[i]) { elem_stack.push_back(A[i]); ht_stack.push_back(tailHt); tailHt = 0; done = true; } else { // pop up elem_stack.pop_back(); tailHt = max(ht_stack.back(), tailHt) + 1; ht_stack.pop_back(); } } } return ht_stack.back();}

  

转载于:https://www.cnblogs.com/lautsie/p/3984035.html

你可能感兴趣的文章
kerboros安装
查看>>
我的学习之路_第二十九章_bootstrap
查看>>
Python读取文件行数不对
查看>>
考研经验交流
查看>>
手游助手应用源码项目
查看>>
职场心得笔记
查看>>
Android context(Application/Activity)与内存泄露
查看>>
mysql 行转列
查看>>
jquery easyui 经验
查看>>
Kafka官方文档翻译——设计
查看>>
本地推送
查看>>
免费的在线文档翻译神器
查看>>
RabbitMQ --- Publish/Subscribe(发布/订阅)
查看>>
细思极恐-你真的会写java吗
查看>>
Jquery 多选下拉列表插件jquery multiselect之如何去掉默认选中项1
查看>>
安装apache Unable to correct problems, you have held broken packages
查看>>
搭建Sphinx环境及文档
查看>>
实验随笔
查看>>
Weapsy分析终
查看>>
8个免费实用的C++GUI库(转载)
查看>>