【test0721】完美选手数(降维思想、树状数组统计)

虽然考试时数据太水了,不过这个题目本身还是很有分析价值的

题目大意:

      给你四次考试的排名(4个序列),若一个选手存在另一个选手在四次排名中的至少三次在他之前,那么我们就说这个选手不是完美的选手,要求统计完美选手的个数,n<=100000

分析:

    n平方的朴素显然是过不了的,那么我们稍作分析,就可以得到这样一个想法,把每个人某3次考试的排名抽象为一个3维空间内的点,若原点到i号人的长方体空间内有一个点,即存在j,使得a[j]<a[i],b[j]<b[i],c[j]<c[i],a,b,c表示这三次考试的排名,那么i号人就不是完美选手了。有了这个想法,我们就可以搞个三维树状数组统计。。。当然,这也是过不了的(空间!),所以,降维成为问题的关键,继续分析

    原问题有4维,首先考虑到每次只管3门就可以了,所以枚举不管的那门,降掉一维;假设剩下a、b、c三门成绩,给a排个序,顺序扫描时降掉一维;再把b[i]插到树状数组中,每个节点维护min{c[i]}(由于实际上我们只关心存不存在排名比i考前的人,并不关心个数),最后对每个点i,比较min{c[j]}和c[i]即可判断这个人是否为完美选手了,复杂度O(nlogn)

代码就略了吧

这道题用到的思想非常有意思,值得参考。那个树状数组xqz用的是平衡树,结果也过了,不过因为常数较大吧,比我的树状数组慢了一倍

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值