阿里笔试
感觉很难受,笛卡尔树没写出来,气死了,我咋这么菜
第一题
有n个羊圈,第i个羊圈初始有a[i]个羊,每天早上每个羊圈会增加k的羊,每天晚上主人会选出羊圈中羊最多的那个,卖掉一半,变为$\lfloor \frac{a[i]}{2}\rfloor$个羊,问m天后剩下多少只羊。
n,k,m,a[i]<1e5
每天增加本质是区间加法,寻找羊最多的是区间最值查询,减半是单点修改,第一想到线段树,但是这么敲也太莽撞了,然后发现区间修改为全区间修改,考虑到可以懒惰化,即增加一个值add用来表示全区间增大的情况。区间加法的时候让add+=k即可,查询的时候是最值查询,修改的时候注意$\lfloor \frac{a[i]+add}{2}-add\rfloor$,这样用一个多重集合维护即可
第二题
给一个长度为n的数组,任意选择一个子串,问最大值的期望, n<1e6
笛卡尔树的板子题,太丢人了,没做出来,考虑建一颗笛卡尔树,那么区间最值就是树根,树形dp维护子树大小,dfs统计答案。
代码祭天,下次一定分情况讨论,先写个暴力偏点分,不然笛卡尔树没搞好,暴力也没写太惨了。
1 |
|
- 本文作者: fightinggg
- 本文链接: http://fightinggg.github.io/yilia/yilia/Q80CPR.html
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!