この問題は、接頭辞やメンテナンス、主に接頭辞について話すことができ
-と接頭辞は
$ \合計^ {I} _表し$ pre_i $提供 {1} A_ {I} $
がある
。$ pre_i pre_ = {I} 1-a_iを$ +
とクエリの接頭辞を-
我々は$ [L、R] $を主張している場合、事前$ $アレイと
{A_1 + + + ... + A_3 A_ L-A_2。1-L {} 1} = $ pre_を$
$ R&LT pre_} = { A_1 + A_2 ... A_ {1- 1} + A_ {1} + ... $がA_R
違いは、二十から二オフセット、我々が得る見つかっ
\ $$合計^ R_ {私は=リットルを} a_iを= pre_r- {L} 1-pre_ $$。
(ペンは数学を理解することはできません)
-コードの
コードは、達成することができます
書式#include <iostreamの> の#include <cstdioを> std名前空間を使用しました。 インライン読み取り(){INT レジスタINT X = 0、V = 1、CH = GETCHAR()。 一方、(!isdigit(CH)){IF(CH == ' - ')V = -1; CH = GETCHAR();} ながら(isdigit(CH)){X =(x << 3)+(X < <1)+(CH ^ '0'); CH = GETCHAR();} 戻りX * V。 } MAX = 100005 INT CONST。 整数N、K、L、R、L、R。 INT X、ANS、RES [MAX]、[MAX]の事前。 )(主{INT 読み取るN =()、K =読み取ります(); {(; I <= N ++ iは1 = intを登録する)ための 、X =(読み取り); RES [X] + =(読み取り) L =分(L、X)、R = MAX(R、X); //查询最小位置和最大位置 } ため(INTレジスタiはLを=、iは<= R; ++ I){//前缀和 プレ[I] =予備[I-1] + RES [i]は、 } (iはLが= INTレジスタ、I + K-1 <= R; ++ i)が用{ ANS = MAX(ANS、予め[ R] -pre [L-1]); //は、 最大値か否かを判断する } //出力応答;のprintf( "%のD \ N-"、ANS) 戻り0; }