結果

問題 No.1890 Many Sequences Sum Queries
ユーザー yassu0320yassu0320
提出日時 2022-04-05 21:58:26
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 215 ms / 2,000 ms
コード長 2,067 bytes
コンパイル時間 269 ms
コンパイル使用メモリ 82,432 KB
実行使用メモリ 82,696 KB
最終ジャッジ日時 2024-11-27 06:24:47
合計ジャッジ時間 4,745 ms
ジャッジサーバーID
(参考情報)
judge1 / judge5
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 215 ms
82,216 KB
testcase_01 AC 198 ms
82,696 KB
testcase_02 AC 95 ms
79,808 KB
testcase_03 AC 94 ms
79,668 KB
testcase_04 AC 91 ms
79,648 KB
testcase_05 AC 92 ms
79,788 KB
testcase_06 AC 93 ms
79,624 KB
testcase_07 AC 145 ms
81,504 KB
testcase_08 AC 120 ms
81,408 KB
testcase_09 AC 116 ms
81,292 KB
testcase_10 AC 189 ms
82,468 KB
testcase_11 AC 155 ms
82,000 KB
testcase_12 AC 180 ms
82,048 KB
testcase_13 AC 185 ms
82,048 KB
testcase_14 AC 152 ms
81,280 KB
testcase_15 AC 101 ms
79,744 KB
testcase_16 AC 101 ms
79,616 KB
testcase_17 AC 98 ms
79,616 KB
testcase_18 AC 98 ms
80,000 KB
testcase_19 AC 101 ms
79,872 KB
testcase_20 AC 99 ms
79,744 KB
testcase_21 AC 100 ms
79,616 KB
testcase_22 AC 100 ms
79,616 KB
testcase_23 AC 97 ms
79,744 KB
testcase_24 AC 96 ms
79,744 KB
testcase_25 AC 99 ms
79,744 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#!/usr/bin/env pypy3

from pprint import pprint
from string import ascii_lowercase as letter
from sys import setrecursionlimit, stdin
from typing import Dict, Iterable, Set

try:
    import pypyjit

    pypyjit.set_param("max_unroll_recursion=-1")
except ModuleNotFoundError:
    ...

INF: int = (1 << 62) - 1
MOD1000000007 = 10**9 + 7
MOD998244353 = 998244353
setrecursionlimit(500_000)
readline = stdin.readline
input = lambda: stdin.readline().rstrip("\r\n")


def inputs(type_=int):
    ins = input().split()

    if isinstance(type_, Iterable):
        return [t(x) for t, x in zip(type_, ins)]
    else:
        return list(map(type_, ins))


def input_(type_=int):
    (a, ) = inputs(type_)
    return a


def input1() -> int:
    return int(readline())


inputi = input1


def input2():
    a = readline().split()
    assert len(a) == 2
    a[0] = int(a[0])
    a[1] = int(a[1])
    return a


def input3():
    a = readline().split()
    assert len(a) == 3
    a[0] = int(a[0])
    a[1] = int(a[1])
    a[2] = int(a[2])
    return a


def input4():
    a = readline().split()
    assert len(a) == 4
    a[0] = int(a[0])
    a[1] = int(a[1])
    a[2] = int(a[2])
    a[3] = int(a[3])
    return a


# start coding
def no(x: int) -> int:
    """
    k * (k+1) // 2 >= x を満たす最小のkを返す
    """
    assert x >= 0

    if x == 0:
        return 0

    left = 0
    right = x + 1
    while right - left > 1:
        mid = (left + right) // 2
        if mid * (mid + 1) // 2 < x:
            left = mid
        else:
            right = mid

    return right


n, q = input2()
A = inputs()
sum_ = sum(x * (x + 1) // 2 for x in A)
for _ in range(q):
    s = inputi()
    if s > sum_:
        print(-1)
        continue

    res = 0
    for i in range(n):
        s -= A[i] * (A[i] + 1) // 2
        res += A[i]
        if s == 0:
            print(res)
            break
        elif s < 0:
            res -= A[i]
            s += A[i] * (A[i] + 1) // 2
            # print(108, s)
            res += no(s)
            print(res)
            break
0