二维线段树
二维线段树的基本结构就是在一维的基础上增加一棵线段树,实现树套树的结构这里以Y坐标为主,在Y坐标基础上构建X坐标上的树。仍然用数组去模拟树,只不过这里用二维数组修改某个结点是先从Y方向上查找对应位置,找到Y坐标后在找X坐标,在找Y坐标是先不用管X坐标的值,找到Y坐标后在在改行中找X坐标,类似于求积分中的先Y后X法。查找是也一样。在传递参数是一定要认真,参数传递错误很难发现和修改。
例题:poj1195点击打开题目链接
代码如下:
#include <cstdio>
using namespace std;
const int MAXN = 1050;
int num[2 * MAXN][2 * MAXN], s;
void update_x(int rtx, int rty, int l, int r, int x, int a)
{
num[rty][rtx] += a;
if(l < r)
{
int m = (l + r) / 2;
if(x <= m)
update_x(rtx * 2, rty, l, m, x, a);
else
update_x(rtx * 2 + 1, rty, m + 1, r,