[NOI2009]二叉查找树

题解:

顺便学了一下笛卡尔树

首先显然这题给出的是一颗treap

那么有一个性质就是在它改变权值的时候,它的中序遍历不会随之改变

那么就变成序列上的问题了

令f[i][j][k]表示i-j这段区间最小值为k(当然首先得离散化)

转移就是枚举mid,然后枚举他们的最小值k1,k2

这样时间是n^3*n*n^2=n^6的

那显然这个太暴力了

我们在初始时处理处g[i][j][k]表示i-j这段区间最小值大于等于k的最小值

那么枚举完mid之后就可以o(1)了

这样是n^4的,常数挺小的吧

另外就是感觉离散化这里有点奇怪

题意应该是支持把权值变成实数的吧,不然这样其实是不对的

posted @ 2018-04-02 20:31  尹吴潇  阅读(93)  评论(0编辑  收藏  举报