10.16 训练周记

这周做了一些有关线段树的练习,和复习了一下其他算法。这周不知道说啥,就直接放点题吧

Codeforces 612D 

 题意是给定一组线段,求最后重叠了k以上的点。这题可以不用线段树也很好做。但如果是用线段树的话,可以先维护两个线段树,进行点的覆盖和区间的覆盖,等到所有操作接受pushdown一串,然后扫描线段输出即可。

Codeforces 12D

给N (N<=500000)个点,每个点有x,y,z ( 0<= x,y,z <=10^9 )

对于某点(x,y,z),若存在一点(x1,y1,z1)使得x1 > x && y1 > y && z1 > z 则点(x,y,z)是特殊点。

问N个点中,求特殊点个数。

先离线处理所有点。然后对所有点按z,y,z降序排序。线段树中,存的是所有 z > Z 的点,叶节点存下每个x上的最大y,然后线段树维护区间最大值。

逆序处理,用并查集每次添加一个集合,同时判断这个数有没有相邻集合,有就合并。同时加上相邻集合的和 。最后得到结果,写的时候不太好想到并查集的解法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值