您的位置:首页 > 其它

差和问题

2015-12-02 22:03 197 查看
刚刚把这道题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来进行处理,接下来就是慢慢敲代码了……
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: