HDU 3530

初心者が理解するために(間違った場所があるかもしれません理解し、笑、アドバイスしてください)

書式#include <stdio.hに> 
する#include < 文字列の.h> 
の#include <math.h>の
書式#include <iostreamの> 
の#include <アルゴリズム> 
書式#include <キュー> 
の#include <スタック>
 に#define M 100005
 使用して 名前空間はstdを、
INT 、N、M、K、I、P [M]、mintail、minhead、maxtail、maxhead、ANS、trmp、最後に、last2。
構造体PP {
   INT viluee。   // 值(单词打错了不要建议)
  int型 markee。   // 标号
} maxque [M]、minque [M]。
INT メイン(){
   ながら(〜のscanf(" %D%D%D"、&​​N、&M&K))
  {   // 清零 
       ANS = 0 ; 
    maxhead = 0 ; maxtail = 0 ; minhead = 0 ; mintail = 0 ; 
    最後 = last2 = 0 ; 
      のmemset(minque、0はsizeof(minque ));のmemset(maxque、0はsizeof (maxque));
      // 输入
    (i = 1 ; iが<= N; iが++ 
    のscanf(" %dの"、&P [I]); 
 
    のための(I = 1; I <= N; I ++は
    { 
      一方(maxhead <= maxtail && maxque [maxtail] .viluee <P [I])maxtail--; // 最大維持 
      maxqueを[++ maxtail] .viluee = P [i]は、maxque [ maxtail] .markee = I; 
      
     
      一方(minhead <= mintail && mINQUE [mintail] .viluee> P [I])mintail--; // 最小維持 
      minqueを[++ mintail] .viluee = P [i]は、minque [mintail] = .markee I; 
    
     一方(maxque [maxhead] .viluee-MINQUE [minhead] .viluee> K)
      { 
        IF(maxque [maxhead] .markee <= MINQUE [minhead] .markee)
          最終 = maxque [maxhead ++] Markee .;       // 最後に保存されたインデックスjが現在の最大値の最大値である-最小最も> K   
        他に                                  //代わり++符号maxheadの参照番号は、リアJせる 
          last2 = MINQUE [minhead ++] Markee ;.      // 要素が吸気(最大電流iが末尾の要素の数である)を含む
                                               // 勘違いすることが特に容易、気体を私の死
     }
      IF(maxque [maxhead] .viluee-MINQUE [minhead] .viluee> = M)
     { 
        ANS = MAX(ANS、I-MAX(最終、last2));       // キュー要素は2を持っていることを確認してください
      } 
    } 
     のprintf(" %Dの\のN- " 、ANS); 
  } 
戻り 0 ; 
}
コードの表示

 

おすすめ

転載: www.cnblogs.com/Lamboofhome/p/11530529.html