問題の意味:長さnの配列が与えられると、プロモーター配列となるように連続配列求めて最大要素-分素子が> =配列(配列呼ば良い)の長さ、出力が見つからないNOは、それが発見され出力YES添字LとRと配列。
アイデア:結論は、配列が条件を満たしている場合、差分> = 2の二つの要素の隣接絶対値が存在しなければならないということです。だから、すべての2つの要素は、我々が満足される満たされていない場合は、それを通過します。
ことを証明し、設定Aサブシーケンスの条件を満たす場合:maxは最大要素であり、minは最小要素であり、maxに設け>分間、次いで配列について:分 * * * * A maxのそれ満たす場合条件、 A マックス -a 分 > + =最大-最小1。この不等式が変形します- >
(最大 -a MAX-1)+(MAX-1 -a MAX-2)+ ......(分+ 1 -a 分)> =最大-最小+ 1
中間値のために、彼らは範囲Aであり、最大と最小のミドルと正の数である、あなたがしたい場合は、不平等(、最初の2つのブラケットを参照し、保持していない最大 -a MAX-1 )及び(A + 1分 -a 分)は、良好なシーケンスを構成するために1又は2を==必要があり、例えば、要素123 456、それらが悪い配列を並べることは、最初は12及び56でなければならない、とのそれ中間値は、それが123 456悪いシーケンスを与えるために、漸増放出することも必要です。2数の差が<= 1唯一の悪いシーケンスのそれぞれに隣接する必要があり、順番に、結論が設立されたと述べました。
ACコード:
書式#include <iostreamの> 書式#include <math.h>の 使用して 名前空間はstdを、 int型T、N。 int型 [ 1000000 ]。 int型のmain() { CIN >> Tと、 一方、(t-- ){ CIN >> N。 INTフラグ= 0 。 以下のために(INT iが= 1 ; I <= N; I ++ ){ CIN >> [I]。 } のための(INTは iは= 1 ; I <N; I ++ ){ もし(ABS([I] -a [I + 1 ])> = 2 ){ COUT << " YES \ n " 。 coutの << I << " " << I + 1 << ' \ n個' ; フラグ = 1 。 休憩; } } もし(フラグ== 0)COUT << " NO \ n " 。 } 戻り 0 。 }