蒟蒻求教:这两种写法有什么区别?
查看原帖
蒟蒻求教:这两种写法有什么区别?
242039
goodier楼主2023/1/26 14:10

90分代码的pushuppushup

mama:区间最大值

sese:区间严格最大值

tt:区间最大值个数

hmahma:区间历史最大值的最大值

void pushup(int p)
{
	if(tr[p].l == tr[p].r) return;
	tr[p].sum = tr[p << 1].sum + tr[p << 1 | 1].sum;
	if(tr[p << 1].ma > tr[p << 1 | 1].ma)
	{
		tr[p].ma = tr[p << 1].ma, tr[p].t = tr[p << 1].t;
		tr[p].se = max(tr[p << 1].se, tr[p << 1 | 1].ma);
	}
	else if(tr[p << 1].ma == tr[p << 1 | 1].ma)
	{
		tr[p].ma = tr[p << 1].ma, tr[p].t = tr[p << 1].t + tr[p << 1 | 1].t;
		tr[p].se = max(tr[p << 1].se, tr[p << 1 | 1].se);
	}
	else
	{
		tr[p].ma = tr[p << 1 | 1].ma, tr[p].t = tr[p << 1 | 1].t;
		tr[p].se = max(tr[p << 1].ma, tr[p << 1 | 1].se);
	}
   tr[p].hma = max(tr[p].hma, tr[p].ma);
}

100分代码的pushuppushup

void pushup(int p)
{
	if(tr[p].l == tr[p].r) return;
	tr[p].sum = tr[p << 1].sum + tr[p << 1 | 1].sum;
	tr[p].hma = max(tr[p << 1].hma, tr[p << 1 | 1].hma);
	if(tr[p << 1].ma > tr[p << 1 | 1].ma)
	{
		tr[p].ma = tr[p << 1].ma, tr[p].t = tr[p << 1].t;
		tr[p].se = max(tr[p << 1].se, tr[p << 1 | 1].ma);
	}
	else if(tr[p << 1].ma == tr[p << 1 | 1].ma)
	{
		tr[p].ma = tr[p << 1].ma, tr[p].t = tr[p << 1].t + tr[p << 1 | 1].t;
		tr[p].se = max(tr[p << 1].se, tr[p << 1 | 1].se);
	}
	else
	{
		tr[p].ma = tr[p << 1 | 1].ma, tr[p].t = tr[p << 1 | 1].t;
		tr[p].se = max(tr[p << 1].ma, tr[p << 1 | 1].se);
	}
}
2023/1/26 14:10
加载中...