[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的,常数挺小的吧
另外就是感觉离散化这里有点奇怪
题意应该是支持把权值变成实数的吧,不然这样其实是不对的