luoguのP3353 [あなたのウィンドウに輝く星]

この問題は、接頭辞やメンテナンス、主に接頭辞について話すことができ

-と接頭辞は

$ \合計^ {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; 
}

  

おすすめ

転載: www.cnblogs.com/Lates/p/12040511.html