タイトル説明
幻想郷では、キー・ルの約束は、有名な妖精の氷をだますことです。
ある日、キー・ルは、冷凍カエルで再びプレーすることを約束し、カエルは瞬時に凍結した氷を使用することです。しかし、カエルは、これまで多くのより賢くなるために、その前にキー・ルの約束は川の向こう側に実行しています。したがって、ノボ呂チー追跡カエルの川岸に決定。
ストリームは、グリッドとして見ることができるチーコノート、N 0の番号が付けられていモバイルグリッド格子の多数に少数のみから露出します。彼女は私は、彼女はただの1つの格子間隔に移動格子であったチー及びLuコンノートは、特定の方法に係る移動に[iがLに+、私はRを+]。彼女は馬鹿ああですので、彼女はそう動いていた理由を尋ね、これは単純ではありません。
各グリッドは、A [i]が、0インデックス凍結格子番号凍結指数を有します。露出コノートQiはそのグリッドセルに位置したときに得ることができる[i]がAのインデックスを凍結します。彼女は過酷なレッスンカエルできるように、キー・ルの約束は、最大凍結指数のために、反対側に到達することを願っています。
彼女は愚かであるので、彼女は喜ばせることを決めたので、しかし、あなたはそれが前方に移動する方法を決定するのを助けます。
最初は、限り、彼女も反対側に到達Nよりも大きいとグリッド数0、次の位置番号にチーコノート暴露。
入力形式
行1:3の正の整数N、L、R
行2:N + 1つの整数、i番目のI-1には、グリッド凍結指数A [I-1]の数を表します
出力フォーマット
最大凍結指数を表す整数。それがない以上^ 2以上31-1を確保するために、
サンプル入力と出力
5 2 3 0 12 3 11 7 -2
11
説明/ヒント
N <=:10,000データの60%を
データの100%まで:N <=20万
すべてのデータのための-1000 <= A [i]が<= 1,000〜1 <= L <= R <= N
ソリューション:モノトーンキュー+ DPは、実際には、難しいことではありません。。。
#include <iostreamの> する#include <cstdioを> する#include <両端キュー> の#include <cmath> 使用して 名前空間STD。 const int型 OO = 0x3f3f3f3f 。 const int型 N = 3000003 ; int型N、L、R、P。 INT [N]。 INTのQ [N]。 INT F [N]。 int型 ANS = - OO; INT メイン(){ freopenは(" 1725.in "、" R " 、STDIN)。 freopenは(" 1725.out "、" W " 、STDOUT)。 scanf関数(" %D%D%D "、&N、&L&R)。 以下のために(int型私= 0 ; iが<= N; iが++ ) のscanf(" %dの"、および[I])。 int型のフロント= 1、リア= 1 。 以下のために(int型 I = 1、N = iは<; iは++ ) [i]がF = - OO。 F [ 0 ] = 0 ; 以下のために(int型 iはL =を、私は、r <= N +; I ++){ 一方(正面= F [Q [リア])rear-- <[IL] F =リア&&> 。 Q [ ++後= I- L。 一方(正面<=リア&& Q [フロント] <IR)フロント++ 。 F [i]は = F [Q [フロント]] + [I]。 } のために(int型 iは= N-R + 1 iは++; iがn = < ) ANS = MAX(ANS、F [I])。 printf(" %dの" 、ANS)。 リターン 0 ; }