Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 使用位的递增序列数_Algorithm - Fatal编程技术网

Algorithm 使用位的递增序列数

Algorithm 使用位的递增序列数,algorithm,Algorithm,例如:一个序列给出了1234现在我必须找到递增序列的数目。 我开始了解比特算法,它给了我O(nlog2n)解,而不是O(n2)。 代码如下 void更新(int-idx,int-val){ while(idx 0){ sum+=树[idx]; idx-=(idx&-idx); } 回报金额; } 我不明白你是如何使用位算法的。你能帮我一下吗?二叉索引树的read函数将返回等于或小于idx的值数 因此,通过逐个插入每个元素,从0到n(n是元素数) 对于每个元素,我们需要知道有多少值小于当前元素

例如:一个序列给出了
1234
现在我必须找到递增序列的数目。
我开始了解比特算法,它给了我O(nlog2n)解,而不是O(n2)。
代码如下

void更新(int-idx,int-val){
while(idx 0){
sum+=树[idx];
idx-=(idx&-idx);
}
回报金额;
}

我不明白你是如何使用位算法的。你能帮我一下吗?

二叉索引树的
read
函数将返回等于或小于
idx
的值数

因此,通过逐个插入每个元素,从0到n(n是元素数)

  • 对于每个元素,我们需要知道有多少值小于当前元素,并且已经添加到位中。假设这个数字是x,那么在这个元素结束的递增序列的数量是2^x

  • 在计算完所有结束于该元素的序列后,我们需要将该元素添加到位中

伪代码:

long result = 0;
BIT tree = //initialize BIT tree
for(int i = 0; i < n; i++){
    int number = tree.read(data[i] - 1);// Get the number of element that less than data[i];
    result += 1L<< number;
    tree.update(data[i], 1);

}
long结果=0;
位树=//初始化位树
对于(int i=0;i结果+=1所以问题是在给定的数字序列中找到递增序列的数量?同样当你说
我不明白他们是如何使用位算法的时候,你应该弄清楚他们是谁/isIs位树是在for循环之前初始化的?你能解释一下你是如何初始化位的吗tree@user4213270Y是的,它在初始化之前,如何初始化位?没什么特别的,只是创建一个空位。