結果

問題 No.1890 Many Sequences Sum Queries
ユーザー yassu0320yassu0320
提出日時 2022-04-05 21:52:27
言語 PyPy3
(7.3.15)
結果
WA  
実行時間 -
コード長 2,041 bytes
コンパイル時間 857 ms
コンパイル使用メモリ 82,048 KB
実行使用メモリ 82,816 KB
最終ジャッジ日時 2024-11-27 06:17:09
合計ジャッジ時間 7,176 ms
ジャッジサーバーID
(参考情報)
judge2 / judge4
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 WA -
testcase_01 WA -
testcase_02 WA -
testcase_03 WA -
testcase_04 WA -
testcase_05 WA -
testcase_06 WA -
testcase_07 WA -
testcase_08 WA -
testcase_09 WA -
testcase_10 WA -
testcase_11 WA -
testcase_12 WA -
testcase_13 WA -
testcase_14 WA -
testcase_15 WA -
testcase_16 WA -
testcase_17 AC 113 ms
79,744 KB
testcase_18 WA -
testcase_19 WA -
testcase_20 WA -
testcase_21 WA -
testcase_22 WA -
testcase_23 WA -
testcase_24 WA -
testcase_25 AC 116 ms
79,556 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(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