第2回 累積和, しゃくとり法
担当 : aotsuki
KMC-ID : aotsuki
slack(内部チャット)
KMC-ID:laft
あくまで一例ですが、下を参考に
累積和
いもす法
しゃくとり法
コンテスト!
長さ の数列 { } が与えられる。
それに対し 個のクエリが与えられる。
各クエリでは2整数 が与えられるので、
区間の和 を求めよ。
制約
問題文
実行時間制限: 2 sec / メモリ制限: 1024 MB
間に合わない!!
S[0]=0;
for(int i=1;i<=N;i++){
S[i]=S[i-1]+a[i-1];
}
{ }は以下のように求めることができる
計算量は
なぜなら
ー
累積和の準備
全ての行(横方向)に対して累積和を取る
Step 2で求めた累積和を用いて、さらに全ての列(縦方向)に対して累積和を取る
出来上がった二次元累積和を用い、長方形領域内の和を求める
Step 1
Step 2
Step 3
Step 4
使い方
Step 1 累積和の準備
Step 1 累積和の準備
{a} | 0 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|---|
0 | 5 | 0 | -3 | 0 | 7 | 2 |
1 | 2 | 8 | -1 | 3 | 0 | -3 |
2 | 4 | 8 | -3 | 8 | 8 | 5 |
3 | 1 | 1 | 7 | -3 | 6 | 1 |
4 | -2 | 5 | 6 | -3 | 0 | -2 |
5 | -4 | 3 | 2 | 0 | -1 | 2 |
これが元の配列a だとすると...
Step 1 累積和の準備
{a'} | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 5 | 0 | -3 | 0 | 7 | 2 |
2 | 0 | 2 | 8 | -1 | 3 | 0 | -3 |
3 | 0 | 4 | 8 | -3 | 8 | 8 | 5 |
4 | 0 | 1 | 1 | 7 | -3 | 6 | 1 |
5 | 0 | -2 | 5 | 6 | -3 | 0 | -2 |
6 | 0 | -4 | 3 | 2 | 0 | -1 | 2 |
こうなります(この配列を説明上a'とする)
Step 2 全ての行に対して累積和を取る
{S} | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 5 | 0 | -3 | 0 | 7 | 2 |
2 | 0 | 2 | 8 | -1 | 3 | 0 | -3 |
3 | 0 | 4 | 8 | -3 | 8 | 8 | 5 |
4 | 0 | 1 | 1 | 7 | -3 | 6 | 1 |
5 | 0 | -2 | 5 | 6 | -3 | 0 | -2 |
6 | 0 | -4 | 3 | 2 | 0 | -1 | 2 |
Step 2 全ての行に対して累積和を取る
{S} | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 5 | 0 | -3 | 0 | 7 | 2 |
2 | 0 | 2 | 8 | -1 | 3 | 0 | -3 |
3 | 0 | 4 | 8 | -3 | 8 | 8 | 5 |
4 | 0 | 1 | 1 | 7 | -3 | 6 | 1 |
5 | 0 | -2 | 5 | 6 | -3 | 0 | -2 |
6 | 0 | -4 | 3 | 2 | 0 | -1 | 2 |
Step 2 全ての行に対して累積和を取る
{S} | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 5 | 5 | -3 | 0 | 7 | 2 |
2 | 0 | 2 | 8 | -1 | 3 | 0 | -3 |
3 | 0 | 4 | 8 | -3 | 8 | 8 | 5 |
4 | 0 | 1 | 1 | 7 | -3 | 6 | 1 |
5 | 0 | -2 | 5 | 6 | -3 | 0 | -2 |
6 | 0 | -4 | 3 | 2 | 0 | -1 | 2 |
Step 2 全ての行に対して累積和を取る
{S} | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 5 | 5 | -3 | 0 | 7 | 2 |
2 | 0 | 2 | 8 | -1 | 3 | 0 | -3 |
3 | 0 | 4 | 8 | -3 | 8 | 8 | 5 |
4 | 0 | 1 | 1 | 7 | -3 | 6 | 1 |
5 | 0 | -2 | 5 | 6 | -3 | 0 | -2 |
6 | 0 | -4 | 3 | 2 | 0 | -1 | 2 |
Step 2 全ての行に対して累積和を取る
{S} | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 5 | 5 | 2 | 0 | 7 | 2 |
2 | 0 | 2 | 8 | -1 | 3 | 0 | -3 |
3 | 0 | 4 | 8 | -3 | 8 | 8 | 5 |
4 | 0 | 1 | 1 | 7 | -3 | 6 | 1 |
5 | 0 | -2 | 5 | 6 | -3 | 0 | -2 |
6 | 0 | -4 | 3 | 2 | 0 | -1 | 2 |
Step 2 全ての行に対して累積和を取る
{S} | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 5 | 5 | 2 | 0 | 7 | 2 |
2 | 0 | 2 | 8 | -1 | 3 | 0 | -3 |
3 | 0 | 4 | 8 | -3 | 8 | 8 | 5 |
4 | 0 | 1 | 1 | 7 | -3 | 6 | 1 |
5 | 0 | -2 | 5 | 6 | -3 | 0 | -2 |
6 | 0 | -4 | 3 | 2 | 0 | -1 | 2 |
Step 2 全ての行に対して累積和を取る
{S} | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 5 | 5 | 2 | 2 | 7 | 2 |
2 | 0 | 2 | 8 | -1 | 3 | 0 | -3 |
3 | 0 | 4 | 8 | -3 | 8 | 8 | 5 |
4 | 0 | 1 | 1 | 7 | -3 | 6 | 1 |
5 | 0 | -2 | 5 | 6 | -3 | 0 | -2 |
6 | 0 | -4 | 3 | 2 | 0 | -1 | 2 |
Step 2 全ての行に対して累積和を取る
{S} | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 5 | 5 | 2 | 2 | 9 | 11 |
2 | 0 | 2 | 10 | 9 | 12 | 12 | 9 |
3 | 0 | 4 | 12 | 9 | 17 | 25 | 30 |
4 | 0 | 1 | 2 | 9 | 6 | 12 | 13 |
5 | 0 | -2 | 3 | 9 | 6 | 6 | 4 |
6 | 0 | -4 | -1 | 1 | 1 | 0 | 2 |
Step 3 全ての列に対して累積和を取る
{S} | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 5 | 5 | 2 | 2 | 9 | 11 |
2 | 0 | 2 | 10 | 9 | 12 | 12 | 9 |
3 | 0 | 4 | 12 | 9 | 17 | 25 | 30 |
4 | 0 | 1 | 2 | 9 | 6 | 12 | 13 |
5 | 0 | -2 | 3 | 9 | 6 | 6 | 4 |
6 | 0 | -4 | -1 | 1 | 1 | 0 | 2 |
Step 3 全ての列に対して累積和を取る
{S} | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 5 | 5 | 2 | 2 | 9 | 11 |
2 | 0 | 2 | 10 | 9 | 12 | 12 | 9 |
3 | 0 | 4 | 12 | 9 | 17 | 25 | 30 |
4 | 0 | 1 | 2 | 9 | 6 | 12 | 13 |
5 | 0 | -2 | 3 | 9 | 6 | 6 | 4 |
6 | 0 | -4 | -1 | 1 | 1 | 0 | 2 |
Step 3 全ての列に対して累積和を取る
{S} | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 5 | 5 | 2 | 2 | 9 | 11 |
2 | 0 | 7 | 10 | 9 | 12 | 12 | 9 |
3 | 0 | 4 | 12 | 9 | 17 | 25 | 30 |
4 | 0 | 1 | 2 | 9 | 6 | 12 | 13 |
5 | 0 | -2 | 3 | 9 | 6 | 6 | 4 |
6 | 0 | -4 | -1 | 1 | 1 | 0 | 2 |
Step 3 全ての列に対して累積和を取る
{S} | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 5 | 5 | 2 | 2 | 9 | 11 |
2 | 0 | 7 | 10 | 9 | 12 | 12 | 9 |
3 | 0 | 4 | 12 | 9 | 17 | 25 | 30 |
4 | 0 | 1 | 2 | 9 | 6 | 12 | 13 |
5 | 0 | -2 | 3 | 9 | 6 | 6 | 4 |
6 | 0 | -4 | -1 | 1 | 1 | 0 | 2 |
Step 3 全ての列に対して累積和を取る
{S} | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 5 | 5 | 2 | 2 | 9 | 11 |
2 | 0 | 7 | 10 | 9 | 12 | 12 | 9 |
3 | 0 | 11 | 12 | 9 | 17 | 25 | 30 |
4 | 0 | 1 | 2 | 9 | 6 | 12 | 13 |
5 | 0 | -2 | 3 | 9 | 6 | 6 | 4 |
6 | 0 | -4 | -1 | 1 | 1 | 0 | 2 |
Step 3 全ての列に対して累積和を取る
{S} | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 5 | 5 | 2 | 2 | 9 | 11 |
2 | 0 | 7 | 10 | 9 | 12 | 12 | 9 |
3 | 0 | 11 | 12 | 9 | 17 | 25 | 30 |
4 | 0 | 1 | 2 | 9 | 6 | 12 | 13 |
5 | 0 | -2 | 3 | 9 | 6 | 6 | 4 |
6 | 0 | -4 | -1 | 1 | 1 | 0 | 2 |
Step 3 全ての列に対して累積和を取る
{S} | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 5 | 5 | 2 | 2 | 9 | 11 |
2 | 0 | 7 | 10 | 9 | 12 | 12 | 9 |
3 | 0 | 11 | 12 | 9 | 17 | 25 | 30 |
4 | 0 | 12 | 2 | 9 | 6 | 12 | 13 |
5 | 0 | -2 | 3 | 9 | 6 | 6 | 4 |
6 | 0 | -4 | -1 | 1 | 1 | 0 | 2 |
Step 3 全ての列に対して累積和を取る
{S} | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 5 | 5 | 2 | 2 | 9 | 11 |
2 | 0 | 7 | 15 | 11 | 14 | 21 | 20 |
3 | 0 | 11 | 27 | 20 | 31 | 46 | 50 |
4 | 0 | 12 | 29 | 29 | 37 | 58 | 63 |
5 | 0 | 10 | 32 | 38 | 43 | 64 | 67 |
6 | 0 | 6 | 31 | 39 | 44 | 64 | 69 |
{S} | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 5 | 5 | 2 | 2 | 9 | 11 |
2 | 0 | 7 | 15 | 11 | 14 | 21 | 20 |
3 | 0 | 11 | 27 | 20 | 31 | 46 | 50 |
4 | 0 | 12 | 29 | 29 | 37 | 58 | 63 |
5 | 0 | 10 | 32 | 38 | 43 | 64 | 67 |
6 | 0 | 6 | 31 | 39 | 44 | 64 | 69 |
さて、出来上がった配列 は何を表しているのか?
例えば は から までの和だった
{a'} | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 5 | 0 | -3 | 0 | 7 | 2 |
2 | 0 | 2 | 8 | -1 | 3 | 0 | -3 |
3 | 0 | 4 | 8 | -3 | 8 | 8 | 5 |
4 | 0 | 1 | 1 | 7 | -3 | 6 | 1 |
5 | 0 | -2 | 5 | 6 | -3 | 0 | -2 |
6 | 0 | -4 | 3 | 2 | 0 | -1 | 2 |
は に から までの和を足したものだった
{a'} | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 5 | 0 | -3 | 0 | 7 | 2 |
2 | 0 | 2 | 8 | -1 | 3 | 0 | -3 |
3 | 0 | 4 | 8 | -3 | 8 | 8 | 5 |
4 | 0 | 1 | 1 | 7 | -3 | 6 | 1 |
5 | 0 | -2 | 5 | 6 | -3 | 0 | -2 |
6 | 0 | -4 | 3 | 2 | 0 | -1 | 2 |
つまり は から までを足したもの!
{a'} | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 5 | 0 | -3 | 0 | 7 | 2 |
2 | 0 | 2 | 8 | -1 | 3 | 0 | -3 |
3 | 0 | 4 | 8 | -3 | 8 | 8 | 5 |
4 | 0 | 1 | 1 | 7 | -3 | 6 | 1 |
5 | 0 | -2 | 5 | 6 | -3 | 0 | -2 |
6 | 0 | -4 | 3 | 2 | 0 | -1 | 2 |
は に から までの和を足したものだった
{a'} | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 5 | 0 | -3 | 0 | 7 | 2 |
2 | 0 | 2 | 8 | -1 | 3 | 0 | -3 |
3 | 0 | 4 | 8 | -3 | 8 | 8 | 5 |
4 | 0 | 1 | 1 | 7 | -3 | 6 | 1 |
5 | 0 | -2 | 5 | 6 | -3 | 0 | -2 |
6 | 0 | -4 | 3 | 2 | 0 | -1 | 2 |
つまり は から までを足したもの!
{a'} | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 5 | 0 | -3 | 0 | 7 | 2 |
2 | 0 | 2 | 8 | -1 | 3 | 0 | -3 |
3 | 0 | 4 | 8 | -3 | 8 | 8 | 5 |
4 | 0 | 1 | 1 | 7 | -3 | 6 | 1 |
5 | 0 | -2 | 5 | 6 | -3 | 0 | -2 |
6 | 0 | -4 | 3 | 2 | 0 | -1 | 2 |
{S} | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 5 | 5 | 2 | 2 | 9 | 11 |
2 | 0 | 7 | 15 | 11 | 14 | 21 | 20 |
3 | 0 | 11 | 27 | 20 | 31 | 46 | 50 |
4 | 0 | 12 | 29 | 29 | 37 | 58 | 63 |
5 | 0 | 10 | 32 | 38 | 43 | 64 | 67 |
6 | 0 | 6 | 31 | 39 | 44 | 64 | 69 |
さて、出来上がった配列 は何を表しているのか?
=> から までの総和を表している
Step 4 長方形領域内の和を求める
例えば、以下の領域の和を求めたい
{a'} | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 5 | 0 | -3 | 0 | 7 | 2 |
2 | 0 | 2 | 8 | -1 | 3 | 0 | -3 |
3 | 0 | 4 | 8 | -3 | 8 | 8 | 5 |
4 | 0 | 1 | 1 | 7 | -3 | 6 | 1 |
5 | 0 | -2 | 5 | 6 | -3 | 0 | -2 |
6 | 0 | -4 | 3 | 2 | 0 | -1 | 2 |
Step 4 長方形領域内の和を求める
この領域の総和( )から...
現在の範囲
{a'} | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 5 | 0 | -3 | 0 | 7 | 2 |
2 | 0 | 2 | 8 | -1 | 3 | 0 | -3 |
3 | 0 | 4 | 8 | -3 | 8 | 8 | 5 |
4 | 0 | 1 | 1 | 7 | -3 | 6 | 1 |
5 | 0 | -2 | 5 | 6 | -3 | 0 | -2 |
6 | 0 | -4 | 3 | 2 | 0 | -1 | 2 |
{a} | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 5 | 0 | -3 | 0 | 7 | 2 |
2 | 0 | 2 | 8 | -1 | 3 | 0 | -3 |
3 | 0 | 4 | 8 | -3 | 8 | 8 | 5 |
4 | 0 | 1 | 1 | 7 | -3 | 6 | 1 |
5 | 0 | -2 | 5 | 6 | -3 | 0 | -2 |
6 | 0 | -4 | 3 | 2 | 0 | -1 | 2 |
Step 4 長方形領域内の和を求める
この領域の総和( )を引き...
現在の範囲
{a'} | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 5 | 0 | -3 | 0 | 7 | 2 |
2 | 0 | 2 | 8 | -1 | 3 | 0 | -3 |
3 | 0 | 4 | 8 | -3 | 8 | 8 | 5 |
4 | 0 | 1 | 1 | 7 | -3 | 6 | 1 |
5 | 0 | -2 | 5 | 6 | -3 | 0 | -2 |
6 | 0 | -4 | 3 | 2 | 0 | -1 | 2 |
{a} | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 5 | 0 | -3 | 0 | 7 | 2 |
2 | 0 | 2 | 8 | -1 | 3 | 0 | -3 |
3 | 0 | 4 | 8 | -3 | 8 | 8 | 5 |
4 | 0 | 1 | 1 | 7 | -3 | 6 | 1 |
5 | 0 | -2 | 5 | 6 | -3 | 0 | -2 |
6 | 0 | -4 | 3 | 2 | 0 | -1 | 2 |
Step 4 長方形領域内の和を求める
さらにこの領域の総和( )も引き...
現在の範囲
{a'} | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 5 | 0 | -3 | 0 | 7 | 2 |
2 | 0 | 2 | 8 | -1 | 3 | 0 | -3 |
3 | 0 | 4 | 8 | -3 | 8 | 8 | 5 |
4 | 0 | 1 | 1 | 7 | -3 | 6 | 1 |
5 | 0 | -2 | 5 | 6 | -3 | 0 | -2 |
6 | 0 | -4 | 3 | 2 | 0 | -1 | 2 |
{a} | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 5 | 0 | -3 | 0 | 7 | 2 |
2 | 0 | 2 | 8 | -1 | 3 | 0 | -3 |
3 | 0 | 4 | 8 | -3 | 8 | 8 | 5 |
4 | 0 | 1 | 1 | 7 | -3 | 6 | 1 |
5 | 0 | -2 | 5 | 6 | -3 | 0 | -2 |
6 | 0 | -4 | 3 | 2 | 0 | -1 | 2 |
Step 4 長方形領域内の和を求める
2回引かれたこの領域の総和( )を足すと...
現在の範囲
{a'} | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 5 | 0 | -3 | 0 | 7 | 2 |
2 | 0 | 2 | 8 | -1 | 3 | 0 | -3 |
3 | 0 | 4 | 8 | -3 | 8 | 8 | 5 |
4 | 0 | 1 | 1 | 7 | -3 | 6 | 1 |
5 | 0 | -2 | 5 | 6 | -3 | 0 | -2 |
6 | 0 | -4 | 3 | 2 | 0 | -1 | 2 |
{a} | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 5 | 0 | -3 | 0 | 7 | 2 |
2 | 0 | 2 | 8 | -1 | 3 | 0 | -3 |
3 | 0 | 4 | 8 | -3 | 8 | 8 | 5 |
4 | 0 | 1 | 1 | 7 | -3 | 6 | 1 |
5 | 0 | -2 | 5 | 6 | -3 | 0 | -2 |
6 | 0 | -4 | 3 | 2 | 0 | -1 | 2 |
Step 4 長方形領域内の和を求める
この領域の総和が求まる!
{a'} | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 5 | 0 | -3 | 0 | 7 | 2 |
2 | 0 | 2 | 8 | -1 | 3 | 0 | -3 |
3 | 0 | 4 | 8 | -3 | 8 | 8 | 5 |
4 | 0 | 1 | 1 | 7 | -3 | 6 | 1 |
5 | 0 | -2 | 5 | 6 | -3 | 0 | -2 |
6 | 0 | -4 | 3 | 2 | 0 | -1 | 2 |
で求まる! ( )
あなたは店を経営している。訪れた 人の客について入店時刻 と出店時刻 が与えられる。
同時刻に店にいた客の数の最大値はいくらか。
同時刻に入店や出店がある場合、まず出店から行われるとする。
制約
問題文
実行時間制限: 2 sec / メモリ制限: 1024 MB
方針
長さ の数列 { } が与えられる。
その数列の連続する 個の整数の和の最大値を出力せよ。
制約
問題文
実行時間制限: 2 sec / メモリ制限: 1024 MB
2 | 5 | -4 | 10 | 3 | -5 |
例:n=6, k=3
2 | 5 | -4 | 10 | 3 | -5 |
例:n=6, k=3
現在の和:3
和の最大値:3
2 | 5 | -4 | 10 | 3 | -5 |
例:n=6, k=3
現在の和:ー
和の最大値:3
2 | 5 | -4 | 10 | 3 | -5 |
例:n=6, k=3
現在の和:ー
和の最大値:3
2 | 5 | -4 | 10 | 3 | -5 |
例:n=6, k=3
現在の和:11
和の最大値:11
2 | 5 | -4 | 10 | 3 | -5 |
例:n=6, k=3
現在の和:ー
和の最大値:11
2 | 5 | -4 | 10 | 3 | -5 |
例:n=6, k=3
現在の和:ー
和の最大値:11
2 | 5 | -4 | 10 | 3 | -5 |
例:n=6, k=3
現在の和: 9
和の最大値:11
2 | 5 | -4 | 10 | 3 | -5 |
例:n=6, k=3
現在の和:ー
和の最大値:11
2 | 5 | -4 | 10 | 3 | -5 |
例:n=6, k=3
現在の和:ー
和の最大値:11
2 | 5 | -4 | 10 | 3 | -5 |
例:n=6, k=3
現在の和: 8
和の最大値:11
長さ の数列 { } が与えられる。
連続部分列で総和が 以上になるもののうち、長さが最小となるものの長さを出力せよ。
制約
問題文
実行時間制限: 2 sec / メモリ制限: 1024 MB
ここは改良できる
ここも改良できる
ここを改良しよう
今度はここを改良しよう
4 | 2 | 5 | 1 | 7 | 3 |
例:n=6, S=11
現在の和:4 < S
長さの最小値:ー
4 | 2 | 5 | 1 | 7 | 3 |
例:n=6, S=11
現在の和:6
長さの最小値:ー
4 | 2 | 5 | 1 | 7 | 3 |
例:n=6, S=11
現在の和:6 < S
長さの最小値:ー
4 | 2 | 5 | 1 | 7 | 3 |
例:n=6, S=11
現在の和:11
長さの最小値:ー
4 | 2 | 5 | 1 | 7 | 3 |
例:n=6, S=11
現在の和:11 S
長さの最小値:3
4 | 2 | 5 | 1 | 7 | 3 |
例:n=6, S=11
現在の和:7
長さの最小値:3
4 | 2 | 5 | 1 | 7 | 3 |
例:n=6, S=11
現在の和:7 < S
長さの最小値:3
4 | 2 | 5 | 1 | 7 | 3 |
例:n=6, S=11
現在の和:8
長さの最小値:3
4 | 2 | 5 | 1 | 7 | 3 |
例:n=6, S=11
現在の和:8 < S
長さの最小値:3
4 | 2 | 5 | 1 | 7 | 3 |
例:n=6, S=11
現在の和:15
長さの最小値:3
4 | 2 | 5 | 1 | 7 | 3 |
例:n=6, S=11
現在の和:15 S
長さの最小値:3
4 | 2 | 5 | 1 | 7 | 3 |
例:n=6, S=11
現在の和:13
長さの最小値:3
4 | 2 | 5 | 1 | 7 | 3 |
例:n=6, S=11
現在の和:13 S
長さの最小値:3
4 | 2 | 5 | 1 | 7 | 3 |
例:n=6, S=11
現在の和:8
長さの最小値:3
4 | 2 | 5 | 1 | 7 | 3 |
例:n=6, S=11
現在の和:8 < S
長さの最小値:3
4 | 2 | 5 | 1 | 7 | 3 |
例:n=6, S=11
現在の和:11
長さの最小値:3
4 | 2 | 5 | 1 | 7 | 3 |
例:n=6, S=11
現在の和:11 S
長さの最小値:3
4 | 2 | 5 | 1 | 7 | 3 |
例:n=6, S=11
現在の和:10
長さの最小値:3
4 | 2 | 5 | 1 | 7 | 3 |
例:n=6, S=11
現在の和:10 < S
長さの最小値:3
4 | 2 | 5 | 1 | 7 | 3 |
例:n=6, S=11
現在の和:終了
長さの最小値:3
http://judge.u-aizu.ac.jp/onlinejudge/index.jsp?lang=ja
もしくは
「 AOJ 」で検索
https://onlinejudge.u-aizu.ac.jp/beta/room.html#kmc2019_n_2
もしくは
http://bit.ly/2UTt4Of
もしくは
部内wikiから