为了证明我是真的睡不着而非摆到凌晨三点,先来一点正经东西。
平面等腰直角三角形加,查询矩形和。
经典问题,但我刚刚才会。考虑矩形加矩形和是咋做的,通过一堆拆拆拆把 4-side 变成 2-side,然后扫描线扫掉一维,数据结构维护另一维。那等腰直角三角形肯定也要拆拆拆。认为下面查的都是 2-side 矩形。等腰直角三角形的拆拆拆是拆成一种 2-side 的等腰直角三角形,考虑这种三角形怎么贡献到询问上。不妨用一个半平面交 \((x=0),(y=b),(y=-x+a+b)\) 来刻画这个三角形,顶点为 \((a,b)\)。注意到一般拆询问矩形的方法还不太好用,因为交不是一个很好的图形,将询问矩形拆成 \(\{(x,y)|x\geq X,y\geq Y\}\) 的 2-side 矩形。此时交一定是一个等腰直角三角形!分情况讨论,将牛牛的多项式乘法拆开维护二次项和一次项即可,限制来源于空间维和时间维,一共三维,cdq 维护。
注意到还有一种情况是三角形长成 \((x=0),(y=b),(y=x-a+b)\),那此时询问矩形就需要拆成 \(\{(x,y)|x\leq X,y\geq Y\}\),剩下类似。总之多做几遍 cdq 总能解决问题的。
感觉我一直学的是假的 cdq,很少听人把分治解释成降维的手段,但这才是分治的本质。
可以发现查询平面等腰直角三角形和也是可以做的,无非是多了几种情况。
\(1\log\) 三维偏序
超级无敌厉害。什么时候忘了再来写。