LoginSignup
0
0

平方分割のバケット

Last updated at Posted at 2024-04-12

ちょっとよくわからなかったので、色々調べながら。

(下記は引用)
max 関数は引数に list オブジェクトを渡すと、list オブジェクトに含まれる要素の最大値を返します。この際、計算量は O(N) です。

import math
A = [int(input()) for _ in range(10000)]
rootA =  int(math.sqrt(10000))
ans = [-1] * rootA

for i in range(rootA):
    start, end = 100 * i, 100 * (i + 1)
    ans[i] = max(A[start:end])

for val in ans:
    print(val)

たとえば、
100*100の平方根ごとに分け、調べるグループを100個ずつにして
そのなかでやりたい処理(たとえばこの問題なら100個の中から最大値を選ぶ)
をやってそれを配列にいれる、というのを繰り返す。
こうすると、たとえば*100なので、
ループの1回目は0番目〜99番目、
ループの2回目は100番目〜199番目
ループの3回目だと200番目〜299番目
。。。と増えていく
だからそれぞれのグループの中で最大値がわかる。というわけ

なんで最初配列を入れるときに0ではなく−1かというと、フラグとして使われているから。
0だと予期しない挙動を返してしまうこともあり、−1としている。
↑ここらへんがよくわからなかったけど、−1じゃないといけないらしい。

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0