加权中位数(快排)

题目:对于具有正整数权重w1,w2,...,wn的n个元素x1,x2,...,xn。的加权中值是满足元件XK 
 和   ,S表示   

你能算出O(n)最坏情况下的加权中位数吗?

input:有几个测试用例。对于每种情况,第一行包含一个整数n(1≤n≤10^ 7) - 序列中的元素数。以下行包含n个整数xi(0≤xi≤10^ 9)。最后一行包含n个整数wi(0

output:每种情况一行,打印一个整数 - 序列的加权中位数。

样本输入:

7
10 35 5 10 15 5 20
10 35 5 10 15 5 20

样本输出:

20

题解:用sort的结构体排序,找到后就直接输出,没啥好说的。。

代码实现:

#include 
#include
#include
using namespace std;
const int N=1e7;
struct bao
{
    long long xi,wi;


} s[N];
bool cmp(struct bao p,struct bao q)
{
    return p.xi

注:这里说一说问题

比如说一组数据

5

1 2 3 4 5

2 1 1 1 1

根据我们的程序得到的答案是2,我上网上也看过别人的代码,结论有3也有2的,不过总体3还是多一些,因为你从上面的到加起来其实是个偶数,它的中位数应该是第3位与第4位的和除以2,我认为是应该是2.5,当初的时候没有考虑到这个事情,应该是碰巧后台没有这组数据,结果AC,当初没考虑这么多,现在写博客的时候发现了这个问题,这个也是个人的一些见解,大家怎么看随大家了。

你可能感兴趣的:(加权中位数(快排))