K)みたいな計算量で解けそう。自明に求まるものを求めてみる。任意のフレンズの集合に対してそのフレンズのいるところを必ず通る経路をすべて求める。フレンズの位置の集合をSとする。jという順に並び変えられるならば、Sのすべてを通る経路がある。なければ経路の数は0。この経路の求め方を考えてみる。W)の経路を見るだけ。「=>」の部分の経路の数を求めて掛けるだけ。w)みたいなのを求めて積をとる。このような経路の数をf(S)とする。ここでf(S)が表しているものを裏返しに考えてみる。フレンズ全体をUとしてそこからSを除いたU∖Sを見てみる。T⊆U∖Sとし、g(T)をTに含まれるフレンズだけを「通らない」経路の数とするとメビウス変換によりg(T)が求まる。フレンズの集合Vについてh(V)をVのフレンズにジャパリまんを渡す経路の数とする。h(V)はVに含まれるフレンズのところをだけを「通ってもよい」経路ともいえる。g(T)を裏返しに見れば、U∖Tだけを「通る」経路の数といえるのでゼータ変換により解が得られる。これは以下のように得る。残った売り手買い手から1人ずつ選んでペアを作り、既存の順番に挿入するということを繰り返すことを考える。既存の順番がi個のペアをすでに作っているとする。この時、売り手、買い手の選び方が(N-i)2通り。この2人をどこに挿入するか。あとは挿入順を無視するためにN!で割る。Treei<jとする。A[i]+R[i]>=A[j]かつA[i]>=A[j]-L[j]jをループで固定する。A[i]+R[i]>=A[j]を満たすiはjが増加するごとに条件がきつくなる。A[i']+R[i']<A[j]となるような添え字i'を取り除いていく。Treeで管理して条件を満たすものだけ数えればいい。「x以上の値が中央値となる連続部分列の個数」とする。2)個あるので、そのちょうど真ん中になるのが中央値。fは単調増加なので二分探索が使える。x以上の値が中央値となる連続部分列を数える二分探索で条件を固定することで、入力を単純にとらえられる。x以上の値とx未満の値かどうかだけをみる。連続部分列は中央値がx以上である。後者を-1とすると、連続部分列の和が0以上ならば、中央値がx以上となるはず。TreeなどでS[l]を数えていけばいい。r)で0-indexedとする。