質問の意味:
限り高い攻撃の英雄としてモンスターよりも、あなたは[i]は、モンスターとのそれぞれ、攻撃のモンスターをn個のレベルを与える、N君はヒーロー、攻撃ごとの英雄、そして疲労値を持っています疲労マイナス1日、唯一、終わって今日のヒーローの挑戦を破った後、(疲労範囲限り)ヒーローはいくつかのレベルを再生することができ、ヒーローを演じる次の日に行くことができる一方でさえ、演奏。最小値は、すべてのレベルを介して再生する必要がありますどのように多くの英雄尋ねました。
アイデア:最初の配列を持ちます。忍耐は同じ値で、大きな被害を使い果たしたとき。忍耐一定値、最大攻撃:・その後、あらかじめ配列がある意味、配列の接尾辞前の配列を使い果たしました。・モンスターは、その後複雑性O(N)のアレイを通ります。[i]は日攻撃時値プレモンスターアレイよりも大きい場合、次の日に進みます。[偽装] [半分のタイトルはQAQを記述することはより困難です]
コード:
1の#include <ビット/ STDC ++ H> 2 3 使用して 名前空間STDを、 4 5 の#define INT長い長 6 のconst int型 N = 22e4。int型のn; 7 int型ARR [N]。 8 int型のプレ[N]。 9 INT STR [N]。 10 INT slove(){ 11 INT ANS = 1。// 总天数 12 int型 last_time = - 1 ; 13 INT MAXN = 0 。 14 のために(INT iが= 0、I <N; I ++ ){ 15 MAXN = MAX(MAXN、ARR [I])。 16 であれば(PRE [I-last_time] < MAXN){ 17 last_time = I- 1 。 18の ANS ++ ; 19 MAXN = ARR [I]。 20 } 21 であれば(PRE [ 1 ] < ARR [I]){ 22 リターン - 1 。 23 } 24 } 25の リターンANS。 26 } 27 署名されたメイン(){ 28の IOS :: sync_with_stdio(0 )。 29 INT _; 30 cinを>> _; 31 一方(_-- ){ 32 CIN >> N。 33 INT maxn1 = 0、maxn2 = 0 。 34 のために(INT iは= 0 ; iが<= N + 10 ; I ++ ) 35 ARR [I] = 0、STR [I] = 0、予め[I] = 0 ; 36 のために(INT I = 0; I <N - 、Iは++ ){ 37 [ CIN >> ARRは、[I]は、 38である maxn1 = MAX(maxn1、ARR [I]); 39 } 40 のint M、 41である CIN >> M、 42である ため(INT I = 0。 I <M、I ++ ){ 43である 整数、Y X; 44である CIN >> X Y; 45 maxn2 = MAX(maxn2、X) 46は 、予め[Y]は= MAX(予備[Y]、X); // 場合同じ患者の値が、より大きな攻撃 47 } 48 IF(maxn1> maxn2){ 49 裁判所未満<< " -1 " << ' \ n個' ; 50は 続けます。 51 } 52 のために(INT I = N- 1、I> 0 ; i-- ){ 53 プレ[I] = MAX(予備[I + 1 ]、プリ[I])。// 54 } 55 COUT << slove()<< ' \ n ' 。 56 } 57 リターン 0 。 58 }