求助片段
查看原帖
求助片段
759525
Tomotake楼主2024/12/14 15:45

一:

struct Tree
	{
		int l, r, lv, rv, v, s;
	}

Tree query(int u, int l, int r)
	{
	    if (tr[u].l >= l && tr[u].r <= r) return tr[u];
	    else
	    {
	        int mid = (tr[u].l + tr[u].r) >> 1;
	        if (r <= mid) return query(ls, l, r);
	        else if (l > mid) return (query(rs, l, r));
	        else
	        {
	            Tree left = query(ls, l, r), right = query(rs, l, r), res;
	            pushup(res, left, right);
	            return res;
	        }
	    }
	}

二:

struct Tree
	{
		int l, r, lv, rv, v, s;
	}

Tree query(int u, int l, int r)
	{
		Tree res = {0, 0, 0, 0, 0, 0};
		if (tr[u].l > r || tr[u].r < l) return res;
		if (tr[u].l >= l && tr[u].r <= r) return tr[u];
		Tree L = query(ls, l, r), R = query(rs, l, r);
		pushup(res, L, R);
		return res;
	}

为什么递归方式会导致第一种方式正确第二种错误?

2024/12/14 15:45
加载中...