목차

배열의 힘

ps
링크acmicpc.net/…
출처BOJ
문제 번호8462
문제명배열의 힘
레벨플래티넘 2
분류

구간 쿼리, Mo's algorithm

시간복잡도O(qlogq + (n+q)*sqrt(n))
인풋사이즈n<=10^5, q<=10^5
사용한 언어Python
제출기록72852KB / 6488ms
최고기록6488ms
해결날짜2021/03/18
태그

48단계

풀이

코드

"""Solution code for "BOJ 8462. 배열의 힘".

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

import sys
from teflib import mosalgo


def main():
    # pylint: disable=unused-variable
    n, t = [int(x) for x in sys.stdin.readline().split()]
    a = [int(x) for x in sys.stdin.readline().split()]
    queries = []
    for i in range(t):
        l, r = [int(x) for x in sys.stdin.readline().split()]
        queries.append((l - 1, r, i))

    count = [0] * (max(a) + 1)

    def add(beg, end, ans):
        for a_i in a[beg:end]:
            ans += (count[a_i] * 2 + 1) * a_i
            count[a_i] += 1
        return ans

    def delete(beg, end, ans):
        for a_i in a[beg:end]:
            count[a_i] -= 1
            ans -= (count[a_i] * 2 + 1) * a_i
        return ans

    answers = mosalgo.mo(queries, add, delete)
    print(*answers, sep='\n')


if __name__ == '__main__':
    main()