差和问题
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来进行处理,接下来就是慢慢敲代码了……
原题链接: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来进行处理,接下来就是慢慢敲代码了……
相关文章推荐
- android studio有XXX包,在使用XX类的时候,一直无法自动导入该包
- Redis: Jedis 源代码剖析1-链接建立和收发命令
- 1031. Hello World for U (20)【字符串处理】——PAT (Advanced Level) Practise
- Search Insert Position
- AJAX
- Qt从零开始制作串口调试助手-(第十三章、其他功能完善)-Creator_Ly
- mysql笔记1
- Hashtable与Properties_绝对、相对、类路径存储与读取JAVA131
- Could not load file or assembly 'xxx' or one of its dependencies.
- BZOJ 1211: [HNOI2004]树的计数( 组合数学 )
- 子梯度(subgradients)
- activity运行时添加fragment(第二种方式使用fragment)
- Xcode 6.2 on El capitane - Storyboard compiler error: Exception while running ibtool
- hive语句优化-通过groupby实现distinct(数据量特别大的时候,使用distinct去重容易导致数据倾斜)
- 线段树 理解,求解数组区间求和,求最小值
- 高斯日记
- 11月·入冬
- 人人都该了解的十大算法
- jdk1.5的特性
- zookeeper服务优化