为何pushup从
void pushup(int x)
{
if(tr[2 * x].lsum == tr[2 * x].len) tr[x].lsum = tr[2 * x].len + tr[2 * x + 1].lsum;
else tr[x].lsum = tr[2 * x].lsum;
if(tr[2 * x + 1].rsum == tr[2 * x + 1].len) tr[x].rsum = tr[2 * x + 1].len + tr[2 * x].rsum;
else tr[x].rsum = tr[2 * x + 1].rsum;
tr[x].sum = max(tr[x].lsum, max(tr[x].rsum, tr[2 * x].rsum + tr[2 * x + 1].lsum));
return;
}
改为
void pushup(int x)
{
if(tr[2 * x].lsum == tr[2 * x].len) tr[x].lsum = tr[2 * x].len + tr[2 * x + 1].lsum;
else tr[x].lsum = tr[2 * x].lsum;
if(tr[2 * x + 1].rsum == tr[2 * x + 1].len) tr[x].rsum = tr[2 * x + 1].len + tr[2 * x].rsum;
else tr[x].rsum = tr[2 * x + 1].rsum;
tr[x].sum = max(tr[2 * x].sum, max(tr[2 * x + 1].sum, tr[2 * x].rsum + tr[2 * x + 1].lsum));
return;
}
就能ac