题意
给一个数列nnn个数字,记为AAA(n≤105n\le 10^5n≤105)。
约定跳跃L/R,pL/R,pL/R,p表示从ppp的位置向左或者向右跳到第一个大于当前数的位置,并且在跳跃之后会改变方向继续跳,直到没有合法的点可以继续跳结束跳跃。
现给出mmm个操作,分为两种:
- U,p,vU,p,vU,p,v表示把ppp的值修改为vvv。
- L/R,pL/R,pL/R,p表示求从ppp点开始向左或向右走,最后会在哪个点停止。
题解
先不考虑修改,对于一个给定的位置p0p_0p0,找到其左边和右边最大的元素pl,prp_l,p_rpl,pr,然后分以下情况讨论:
- plp_lpl与prp_rpr都不存在,那么当前元素就是最大值,不能继续跳,答案就是当前点。
- 只有plp_lpl存在,说明该元素右面没有更大的元素,再分两种情况:
- 方向为LLL时,向左跳到第一个大于当前元素的元素的位置psp_sps,其中ps≥plp_s\ge p_lps≥pl,然后转向右,而右边已经没有大于A[ps]A[p_s]A[ps]的元素了,所以答案为psp_sps