紙IOI2005代表チームのセット上の事例[神]の問題......
今233の論文を読んで、特定の証明
#include <ビット/ STDC ++ H> 使用して 名前空間STDを、 int型N、M。 長い 長いANS; INTヴァル[ 1000005 ]、サイズ[ 1000005 ]、[ 1000005 ]、CNT、RT [ 1000005 ]、L [ 1000005 ]、R [ 1000005 ]。 INTツリー[ 1000005 ] [ 2 ]、FA [ 1000005 ]、DIS [ 1000005 ]。 INTのマージ(int型のx、int型Y){ もし(x == 0 || Yの== 0 ) リターンX + Y。 もし(ヴァル[X] < ヴァル[Y]) スワップ(X、Y) ツリー[X] [ 0 ] =マージ(Y、ツリー[X] [ 0 ])。 サイズ[X] =サイズ[ツリー[X] [ 0 ] +サイズ[ツリー[X] [ 1 ]] + 1 。 FA [ツリー[X] [ 0 ] =のX。 もし(DIS [ツリー[X] [ 1 ] <DIS [ツリー[X] [ 0 ]]) スワップ(ツリー[X] [ 1 ]、ツリー[X] [ 0 ])。 DIS [X] = DIS [ツリー[X] [ 0 ] + 1 。 リターンのx; } int型メイン() { scanf関数(" %のD "、&N)。 以下のために(int型私= 1 ; iが<= N; iが++){scanf関数(" %のD "、および[I])。[1] - = I;} int型の CNT = 0 。 以下のために(int型 I = 1、N = iは<; iは++ ){ valは[i]は = [I]。 サイズ[I] = 1 。 ツリー[I] [ 0 ] =ツリー[I] [ 1 ] = DIS [I] = 0 ; CNT ++ ; RT [CNT] = I。 L [CNT] = R [CNT] = I。 一方(CNT> 1 &&ヴァル[RT [CNT] <ヴァル[RT [CNT- 1 ]]){ CNT - 。 RT [CNT] =マージ(RT [CNT]、RT [CNT + 1 ])。 R [CNT] = R [CNT + 1 ]。 一方、(2 *サイズ[RT [CNT]]> R [CNT] -1- [CNT] + 2 ) RT [CNT] =(ツリー[RT [CNT] [マージ1 ]、ツリー[RT [CNT] [ 0 ])。 } } のための(INTI = 1;私は= CNTを<; iは++ ){ 長い 長い qwq = ヴァル[RT [I]]。 用(INT J = L [i]は、J <= R [i]は、J ++ ) ANS + = 1LL * ABS(qwq- [J])。 } COUT << ANS。 リターン 0 ; }