사용자 도구

사이트 도구


ps:problems:boj:17203

∑|ΔEasyMAX|

ps
링크acmicpc.net/…
출처BOJ
문제 번호17203
문제명∑|ΔEasyMAX|
레벨실버 4
분류

누적합

시간복잡도O(n+q)
인풋사이즈n<=1000, q<=1000
사용한 언어Python
제출기록30840KB / 76ms
해결날짜2022/05/29
태그

[라이] 구간합 배열

풀이

  • 주어진 구간에서의 박자의 변화량의 부분합을 구하는 문제이다. 박자의 변화량의 누적합을 O(n)에 만들면, 각 쿼리를 O(1) 에 처리 가능하다. 총 시간복잡도는 O(n+q)
  • 근데 박자의 빠르기가 음수로 주어지는건 대체 뭔지… 별로 의미가 없긴 하지만 문제의 시나리오에도 조금 신경을…;

코드

"""Solution code for "BOJ 17203. ∑|ΔEasyMAX|".

- Problem link: https://www.acmicpc.net/problem/17203
- Solution link: http://www.teferi.net/ps/problems/boj/17203

Tags: [Prefix sum]
"""

import itertools
import sys


def main():
    # pylint: disable=unused-variable
    N, Q = [int(x) for x in sys.stdin.readline().split()]
    a = [int(x) for x in sys.stdin.readline().split()]
    v = a[0]
    diff_psum = [0, v] + [v := v + abs(y - x) for x, y in itertools.pairwise(a)]

    for _ in range(Q):
        l, r = [int(x) for x in sys.stdin.readline().split()]
        print(diff_psum[r] - diff_psum[l])


if __name__ == '__main__':
    main()

토론

댓글을 입력하세요:
Z T​ N P G
 
ps/problems/boj/17203.txt · 마지막으로 수정됨: 2022/05/31 15:04 저자 teferi