====== Breed Counting ====== ===== 풀이 ===== * 소의 마리수의 누적합 배열을 3종류의 id에 대해 각각 만들어주면 된다. 쿼리가 주어지면, 각 누적합 배열에서 부분합을 각각 계산해주면 된다. * 누적합 배열을 만드는데 O(n), q개의 쿼리를 각각 O(1)로 처리하는 데에 O(q). 총 O(n+q). ===== 코드 ===== """Solution code for "BOJ 11969. Breed Counting". - Problem link: https://www.acmicpc.net/problem/11969 - Solution link: http://www.teferi.net/ps/problems/boj/11969 Tags: [Prefix sum] """ import sys def main(): N, Q = [int(x) for x in sys.stdin.readline().split()] # pylint: disable=unused-variable ids = [sys.stdin.readline().rstrip() for _ in range(N)] prefix_sums = [[v := 0] + [v := (v + 1 if x == '1' else v) for x in ids], [v := 0] + [v := (v + 1 if x == '2' else v) for x in ids], [v := 0] + [v := (v + 1 if x == '3' else v) for x in ids]] for _ in range(Q): a, b = [int(x) for x in sys.stdin.readline().split()] print(*(psum[b] - psum[a - 1] for psum in prefix_sums)) if __name__ == '__main__': main() {{tag>BOJ ps:problems:boj:실버_3}}