如何使用树状数组维护区间最值
  • 板块学术版
  • 楼主PassName
  • 当前回复28
  • 已保存回复29
  • 发布时间2024/10/22 20:57
  • 上次更新2024/10/22 22:07:03
查看原帖
如何使用树状数组维护区间最值
524911
PassName楼主2024/10/22 20:57

RT。只会维护区间和和区间修改,怎么维护区间最值。代码如下

struct BIT
{
    int c[2][N];
	int lowbit(int x){return x & -x;}
	void _add(int k, int x, int y) 
	{
		for (; x < N; x += lowbit(x)) 
		    c[k][x] += y;
	}
	int _ask(int k, int x) 
	{
		int res = 0;
		for (; x; x -= lowbit(x)) 
		    res += c[k][x];
		return res;
	}
	void add(int l, int r, int k)
	{
		_add(0, l, k), _add(0, r + 1, -k);
		_add(1, l, l * k), _add(1, r + 1, -(r + 1) * k);	
	}
	int ask(int x)
	{
		return (x + 1) * _ask(0, x) - _ask(1, x);
	}	
	int query(int l, int r)
	{
		return ((r + 1) * _ask(0, r + 1) - _ask(1, r + 1)) - (l * _ask(0, l) - _ask(1, l));
	}
} tree;
2024/10/22 20:57
加载中...