其实我一直是不愿意填算法坑的……主要是自己的数学水平很一般,很容易出现填坑不成自己反被埋的情况,但是这个坑不填又不行,所以在填坑之前说明:这个仅是虾神我自己的理解,不代表原文(限于能力问题,数学论文确实不怎么能读透),如果有疑惑或者错误,请自行查阅原始论文,虾神只负责科普。...
分类:
编程语言 时间:
2015-08-18 16:17:49
阅读次数:
1216
18.9 动态计算中位数利用两个堆:一个最大堆,存放小于中位数的值;一个最小堆,存放大于中位数的值。则两个堆的堆顶即为数组中最中间的两个数。在插入新元素的时候,我们只要维护两个堆, 使其堆中元素的数量差别不超过1即可。ref refref: hawstein
分类:
其他好文 时间:
2015-08-18 15:49:21
阅读次数:
123
1 #include 2 #include 3 #include 4 #include 5 6 using namespace std; 7 8 priority_queue,greater >pq2; 9 priority_queue pq1;10 11 int main()12 {...
分类:
其他好文 时间:
2015-08-17 13:42:00
阅读次数:
688
将a从小到大排序可以得到最优解,设f[i][j]表示前i个用了j种颜色的最小累计误差,则f[i][j]=min(f[k-1][j-1]+w(k,i))。其中w(k,i)为[k,i]区间里所有数与中位数的差值的绝对值之和,有w(k,i)=w(k+1,i)+a[(k+i+1)>>1]-a[k]。时间复杂...
分类:
其他好文 时间:
2015-08-16 02:07:12
阅读次数:
91
传送门
大意:给出NN个数,对于存有每两个数的差值的序列求中位数,如果这个序列有偶数个元素,就取中间偏小的作为中位数。因为N<=100000N <= 100000,所以想要求出每一个差值是不可行的,我们很容易想到二分答案。 在二分答案时我们会进行判定,求出小于等于枚举值的个数,我看其他人的判定似乎都是O(NlogN)O(N\log N) 的,我在这里就给出一个O(N)O(N)的判定方法。首先同样将...
分类:
其他好文 时间:
2015-08-15 01:38:12
阅读次数:
152
1 #include 2 #include 3 #include 4 #include 5 6 using namespace std; 7 8 multiset smin; 9 multiset smax; 10 multiset::iterator it; 11 ...
分类:
其他好文 时间:
2015-08-14 20:57:40
阅读次数:
121
1.题意大概为查找两个数组 的中位数,这个不难,O(N)的时间复杂度就可以解决,但题目的要求是用 O(log (m+n))的时间复杂度来解决该问题!
2.由于时间复杂度为 O(log (m+n)),一般会用到二分法,每次取数组nums1和nums2所剩下的部分的中间值mid1和mid2,然后比较两个数组的中间值大小,较大的一个取数组较小的一部分,较小的mid数组取较大的一部分。由于每次都要多虑到一部分不符合条件的,所以刚开始要求第k=(len1+len2)/2个数的k每次都要更新。
3.重负步骤2,直至每个...
分类:
其他好文 时间:
2015-08-06 22:18:25
阅读次数:
101
KPITime Limit: 2000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 901Accepted Submission(s): 398Problem Descripti...
分类:
编程语言 时间:
2015-08-05 21:42:48
阅读次数:
119
题意:
问l,r区间 取任意整数x , 问 ∑|X-xi| 的最小值
做法:很明显 这个X是中位数。 中位数想到划分树,然后在划分树 建树的时候,把进左子树的数计算一个前缀和,然后在查询的时候,如果到右子树,就把区间内进入左子树的数算一个和。最后统计出来的sumlft 就是所有比区间内中位数小的数了。...
分类:
其他好文 时间:
2015-08-04 11:27:18
阅读次数:
129