在段树中插入和搜索

时间:2014-03-11 19:07:24

标签: c++ segment-tree

所以问题就像这样,我们有一个数组,我们应该做两种类型的操作:

1)在段[x,y]

上添加值v

2)在段[x,y]上找到总和

我正在寻找答案,却找不到任何答案,如果您有任何有用的链接或建议,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

这两个赋值可以通过使用标准算法和lambda表达式完成,或者通过使用基于for语句的范围实际上是等效的。

使用算法和lambda表达式的方法

#include <algorithm>

std::for_eqch( std::begin( a ), std:;end( a ),
               [=]( int &z ) { if ( x <= z && z <= y ) z += v; } );

#include <numeric>

int sum = std::accumulate( std::begin( a ), std::edn( a ), 0,
                           [=]( int acc, int z ) { return acc + ( x <= z && z <= y ? z : 0 ); } );

使用基于

的范围的方法
for ( int &z : a )
{
   if ( x <= z && z <= y ) z += v;
}

int sum = 0;

for ( int z : a )
{
   if ( x <= z && z <= y ) sum += z;
}

事实上,您可以使用任何形式的循环来执行分配。:)