如何解决段树问题和最长持续增长链
施乐国王有一支庞大的由N士兵组成的波斯军队,他们站成一直线,每位士兵都拥有力量Pi。 Xerxes国王知道相邻士兵之间的协作更多,因此Xerxes希望在“ N”个士兵中派出最长的连续士兵链,以使他们的能力得到严格提高。
由于薛西斯国王知道黑魔法,他可以增加或减少第i名士兵的力量。您是薛西斯国王的顾问,他要求您说出当前军队中持续不断增加的士兵链的长度。
King Xerxes随时会执行两项操作:
1 x y:将第x名士兵的力量提高'y'-(如果为负,则表示降低)。
0 x y:问您在[x,y]范围内的最长连续不断增加的士兵链的长度
约束:
1
1
1
对于类型1查询:1
对于类型0查询:1
这个问题看起来很明显,它使用了段树方法。但是对于这个问题,我在构建分段树方面面临困难。谁能说出必须在段树数组中存储什么? 以及构建函数的外观如何?
构建功能:
void build(int si,int ss,int see)
{
if(ss=se)
{
st[si]++;
return;
}
int mid=(ss+se)/2;
build(2*si,ss,mid);
buid(2*si+1,mid+1,se);
if(st[2*si+1]>st[2*si])
{
st[si]++;
}
else
{
st[si]=st[si]+0;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。