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是的,它在初始化之前,如何初始化位?没什么特别的,只是创建一个空位。