2つの結論があります:1ソートした後、答えは3つの連続した番号でなければなりません。シーケンスはフィボナッチ数であったとしても、この時間も1E9を超えているため2以上の44の系列長が3の同じ番号を(持っていなければならないとき)、その後、木々や他のデータ構造(多くの場合、少しカード、社長ツリーの提案の議長)が45大の前に維持することができます
1つの#include <ビット/ STDC ++ H> 2 使用して 名前空間STDを、 3 の#define N 100005 4 の#define半ば(L + R >> 1) 5 の#define INF 1000000000 6 int型 V、N、M、K、X、Y、[N]、B [N]、R [N] 、F [N * 20 ]、LS [N * 20 ]、RS [N * 20 ]。 7 ボイド更新(int型 K1、INT&K2、int型の L、int型の R、int型X){ 8 K2 = ++ V。 9つの LS [K2] =のLS [K1]。 10 RS [K2] = RS [K1]。 11 F [K2] = F [K1] + 1 。 12 であれば(L == R)のリターン; 13 であれば(X <= MID)更新(LS [K1]、LS [K2]、L、中、X)。 14 他の更新(RS [K1]、RS [K2]、ミッド+ 1 、R、X)。 15 } 16 INTクエリ(INT K1、int型 K2、int型の L、INT R、INT P){ 17 であれば(L == R)戻りL。 18 であれば(F [RS [K2] - F [RS [K1]]> = P)リターンクエリ(RS [K1]、RS [K2]、ミッド+ 1 、R、P)。 19 リターンクエリ(LS [K1]、LS [K2]、L、中間、PF [RS [K2] + F [RS [K1]])。 20 } 21 INT メイン(){ 22 ながら(scanf関数(" %d個の%のD "、&N、&M)=!EOF){ 23 V = 0 。 24 のために(int型 i = 1 ; iが<= N; iが++)のscanf(" %dの"、および[I])。 25 のためには、(int型 i = 1 ; iがn = <; iは++)[I] = B [i]は、 26 ソート(B + 1、B + N + 1 )。 27 int型 K =一意(B + 1、B + N + 1)-B- 1 。 28 のために(int型 i = 1 ; iが<= N; iが++)[I] = LOWER_BOUND(B + 1、B + K + 1、[I]) - B。 29 のためには、(int型 i = 1 ; iがn = <; I ++の)更新を(R [I- 1 ]、R [I] = ++ V、1 、K、[I])。 30 のために(int型 I = 1 ; I <= M; iが++ ){ 31 のscanfを("%D%D 」、およびX&Y); 32 int型 MA =分(Y-X + 1、45)、フラグ= 0 ; 33 用(INT J = 1 ; J <= MA; J ++ ){ 34 [J ] =クエリ(R [X- 1 ]、R [Y]、1 、K、J)、 35 であれば((J> 2)&&(B [J- 1 ] + B [J] > B [J- 2 ])){ 36 のprintf(" %LLDする\ n "、0LL + B [J] + B [J- 1 ] + B [J- 2 ]]); 37 フラグ= 1 。 38 ブレーク; 39 } 40 } 41 場合のprintf((フラグ!)" -1の\ n " ); 42 } 43 } 44 }