快乐的一天从AC开始 | 20210724 | P3810

题目链接

(补20210720)

快乐周末,名不虚传。

晚饭和室友出去吃了,快乐。就是没想到去的馆子菜量巨大,失算了。不过吃的很爽,馆子里的音乐还是真人现场唱的,有点意思。

心路历程

洛谷随机到了,发现已经不会做高位偏序了,就当复习一下CDQ分治了。之后可能还会复习一下bitset的做法和KD-Tree。

思路

3维,直接按第一关键字排序就可以省去一维。

现在只需要考虑2维了,故名思意,CDQ分治是分治的一种,每次将当前区间均分成两块。CDQ分治将所有点对分为3类:两个点都在左侧的,两个点都在右侧的,和横跨两侧的。都在一侧的直接分治 解决了,不用考虑。

现在要考虑横跨两侧的。分别将两边按第二关键字排序,然后枚举右侧的位置(因为之前按第一关键字排过序了,只有左侧的点可能对右侧的点有贡献)。因为两边都是有序的,左侧一定是的某个前缀中的位置满足第二关键字小于当前枚举的点,这个可以用一个指针去维护。

现在还有第三关键字,这个就得借助数据结构了。左侧满足条件的前缀的第三关键字都加入权值树状数组,然后再查询比当前枚举到的位置第三关键字小的点有多少个。单点修改,求前缀和,树状数组就够了。

然后由于题目要求不包含自身,所以去个重,点加个属性记录重合的点数,最后扣去1就行了。

posted @ 2021-07-25 00:11  _Backl1ght  阅读(26)  评论(0编辑  收藏  举报