给定一个1-D数组,比如4个元素5 4 2 3,我知道改进的合并排序(分治)算法可以计算反转数(对,这样我
x1 <= x2,
y1 <= y2,
and A[x2][y2] < A[x1][y1].
Say for N = 2
5 4
2 3
倒置的编号为4对(5,4) (5,2) (5,3)和(4,3)
我不熟悉堆栈溢出。请原谅格式问题。
Fenwick树是非常有用的数据结构,用于维护每个数据元素的频率和操作累积频率数据表。
本教程(BIT)将为您提供数据结构的良好开端。它有所有的实现细节。
理解了数据结构后,您可以使用它来计算数组中的倒置。假设我们有a[1... n]
并且倒置被定义为所有对i, j
使得i
最初,所有频率都初始化为0。
for i = n to 1
res += range-sum(1, a[i]-1)
insert(a[i])
最后,res将是你的答案。
所用时间:O(nlogn)
对于多维,创建多维二进制索引树。以上教程给出了2D-BIT的一个示例
以下是我根据上述教程的实现:
#define sz(x) ((int)x.size())
#define LSOne(x) (x & -x)
typedef long long LL;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef pair<int,int> pii;
//Use one based indexing
class FenwickTree{
public:
vvi ft;
int n;
FenwickTree(int _n){
n=_n;
ft.assign(n,vi(n,0));
}
int rsq(int x,int y){
int sum=0;
for(;x;x-=LSOne(x))sum += rsqY(x,y);
return sum;
}
int rsqY(int x,int y){
int sum=0;
for(;y;y-=LSOne(y))sum += ft[x][y];
return sum;
}
int rsq(int _x,int _y,int x,int y){
return rsq(x,y)-rsq(x,_y-1)-rsq(_x-1,y)+rsq(_x-1,_y-1);
}
void update(int x,int y,int v){
for(;x<=n;x+=LSOne(x))updateY(x,y,v);
}
void updateY(int x,int y,int v){
for(;y<=n;y+=LSOne(y))ft[x][y] += v;
}
void clear(){
ft.assign(n,vi(n,0));
}
};
问题内容: 我试图根据条件计算某个值在多维数组中出现的次数。这是一个示例数组; 如果要显示所有绿色水果,可以执行以下操作(让我知道这是否是最佳方法); 这将输出; 太好了,我可以在那里看到它们是2个值,但是实际上我如何才能让PHP计算绿色的水果数量并将其放在变量中,以便我在脚本中进一步使用以解决问题?例如,我想做类似的事情; 我看过count(); 但是我看不到任何添加“ WHERE / cond
问题内容: numpy中最简单的方法来反转数组的最内部值是这样的: 这样我得到以下结果: 非常感谢你! 问题答案: 怎么样: 而最后一个维度的反方向是: 要么 尽管我更喜欢后者,因为前两个维度是隐式的,因此很难看到正在发生的事情。
我无法让我的数组总结出特定的部分。 以下是我的课程说明: 编写一个程序来准备公司销售报告•该程序要求用户输入一周内三种产品的每日销售额。对3种产品和7天使用双2D阵列展示每种产品的销售额。然后,程序计算并显示以下内容:•一周内所有三种产品的销售总额。•所有产品的日平均销售额。•每种产品一周的销售总额。使用1D阵列保存每个产品的总销售额。•每种产品的日平均销售额周末所有产品的销售总额(假设第六天和第
这行代码给我抛出了异常:线程“main”中的异常java.lang.IndexOutofBoundsExc的索引:5,大小:5 我试图将数组列表转换成多维数组。
问题内容: 我正在尝试计算由文本字段接收的输入填充的数组的总数,均值和中位数。我设法算出了总数和均值,但我只是无法获得中位数。我认为在执行此操作之前需要对数组进行排序,但是我不确定如何执行此操作。这是问题吗,还是我没有找到另一个问题?这是我的代码: 问题答案: Java中的Arrays类具有静态的排序功能,您可以使用调用该功能。
我试图计算由TextField接收的输入填充的数组的总数、平均值和中位数。我已经算出了总数和平均数,但中位数无法计算出来。我认为在我可以这样做之前需要对数组进行排序,但我不确定如何这样做。是这个问题,还是还有一个我没有找到的?下面是我的代码: