刷题随笔
暑假开始,主要刷点题,防止忘得太严重,随便记录下基本思路。
还有不写线段树平衡树那些了,太费时间了,debug烧脑)。
codewar用java刷,其他的用C++。
- 单调栈
-
luoguP5788 : 给定一个数组,要求求出每个数组元素后面第一个比它大的元素下标。单调栈模板题,维护一个从栈底到栈顶单调减小的栈。逆序扫描数组,每次插入当前元素,并且维护单调栈性质,先维护后插入,插入前的栈顶元素就是对当前元素要找的大于它的第一个元素。
-
luoguP1901 :同上。
-
luoguP2866 :维护每头牛向右找到第一个不比自己矮的坐标,统计两牛之间的总数即可,这样是从右往左扫描。题解似乎还有一种更优的做法:与其求一头牛能看见几头,不如求本牛能被几头牛看见,能看见的总数一定等于被看见的总数,这样是从左往右扫描,单调栈中的就是大于当前位置的,也就是能看间当前位置的牛的集合。
-