Vi={ai,bi,i}V_i=\{a_i,b_i,i\}とします.このVVを第1要素, つまりaia_iの大きさ順で昇順ソートしたものをVV'とします.

i=1,2,,Ni=1,2,\cdots,Nの順に見ていき, 11以上i1i-1以下の数jjが,Vj,2<Vi,2V'_{j,2} < V'_{i,2}を満たすとします. このときVi,3V'_{i,3}jjの間には辺が張られています.

これはVV'が第1要素でソートされていることからわかります.

同様にi=N,N1,,1i=N,N-1,\cdots,1の順に見ていき, i+1i+1以上NN以下の数jjが, Vi,2<Vj,2V'_{i,2} < V'_{j,2}を満たすとします. このときVi,3V'_{i,3}jjの間には辺が張られています.

これらの計算は(数列の転倒数を求める要領で)セグメント木やFenwick Treeを用いてO(NlogN)O(N\mathbf{log}N)で計算可能です.