差和问题

刚刚把这道题A了,是之前比赛时没做的题。看到队友早已写了一些博客,想起自己也该写了,也正好是第一篇文章,本来很早便该写的,想来不知是太懒还是什么。
原题链接:http://www.51nod.com/contest/problem.html#!problemId=1394
是中文题,便不用再说题意了。
最开始很容易想到的便是更新总和和总个数,对于一个新插入的点而言,维护出比它小的个数和值总和。设sum,sumn,ans,ansn,ansnm分别为总和,总个数,答案,比它小的个数和和值总和。那么在每回插入或删除更新后我们可以通过ans(+或者-)=sum-2*ansnm+ay[i]*(2*ansn-sumn);来不断更新当前答案,对于维护操作通过树状数组来进行维护。
当时做这道题时出现了一个问题,想来还是太弱渣了。
数据范围很大,所以需要采取离散化。所以对一开始的一个集合进行离散化,然后进行维护,但是对于后续区间点无法确定,然后便JJ了。属于不是死磕题的类型,当时便就放下了。过后知道这道题要离散化然后树状数组维护的题解后便再次做了。发现把所有数据输入后再进行离散化后后续区间点便也确定了,然后过程中还需要一个visit数组来标记当前这个下标点是否存在,假设不存在的话,是无法进行删除操作的,需要输出-1,还有一个是离散化数组中的重复数据,可以通过unique来进行处理,接下来就是慢慢敲代码了……

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值