(事業部の定格。2)教育Codeforcesラウンド69 D.もう一つのサブアレイ問題【数学+分块】

私は、題し

  D.もう一つのサブアレイ問題

第二に、分析

  導出式のリファレンスは、ロス・バレーその派生集まります

  式の焦点導出、式が導出され、ブロックが容易に考えられます。しかし、揚げ書きやすいです。

  1いくつかの場所でオーバーフローに簡単に、そしてセットの無限値の大きさも関連しています。

  すべての2が$ R $の境界を決定する場合は、列挙の$ M $の残りの部分の場合には、まだ$器R $以上である気づいている必要があります列挙することはできません。

三、ACコード

1つの#include <ビット/ STDC ++ H>
 2  
3  使用して 名前空間STDを、
4  の#define MIN(A、B)((A)<(B)?(A):( B))
 5  の#define MAX(A、B)((A)>(B)?(A):( B ))
 6のtypedef 長い LL。
7  のconst  int型 MAXN = 3E5 + 13 8  CONST LL INF = 1E15。
9  int型N、M。
10  LLのK。
11  INT [MAXN]。
12  LL和[MAXN]。
13  LLのD [MAXN]。
14 LLのDmin [ 15 ]。
15  
16  のint main()の
 17  {
 18      // freopenは( "INPUT.TXT"、 "R"、STDIN)。
19      一方(scanf関数(" %D%D%I64d "、&​​N、&M、&K)!= EOF)
 20      {
 21          フィル(Dminを、Dminが+ 11 、INF)。
22          和[ 0 ] = 0 23          のためには、int型 i = 1 ; iが<= N; iが++ 24          {
 25              のscanf(" %dの"、および[I])。
26              和[I] =和[I - 1 ] + [I]。
27              D [I] =和[I] - K *(I / M)。
28          }
 29          LL ANS = 0 30          のDmin [ 0 ] = 0 31          のためには、int型 I = 1 iは++; iがn = < 32          {
 33              LLのRES = - INF。
34              のためにINT J = 0 ; J <Mであり、j ++ 35              {
 36                  INTF = CEIL(1.0 *((I%のM) - J)/ M)。
37の                  RES = MAX(RES、D [i]は-のDmin [J] - K・F)。
38              }
 39              のDmin [Iの%のM] = MIN(D [i]は、Dminの[I%のM])。
40の              ANS = MAX(RES、ANS)。
41          }
 42          のprintf(" %LLDする\ n " 、ANS)。
43      }
 44  
45  
46 }

 

おすすめ

転載: www.cnblogs.com/dybala21/p/11328463.html