初心者が理解するために(間違った場所があるかもしれません理解し、笑、アドバイスしてください)
書式#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 ; }