문제 준비

아직 제출이 없습니다시간 제한2초메모리 제한256 MB

문제

앤드루는 대회에 낼 프로그래밍 문제 nn개를 만들었고, 이제 문제를 다듬으려고 한다. ii번 문제를 준비하는 데 필요한 총 시간은 tit_i분이라고 추정했다. 앤드루는 친구들을 불러 이 일을 나눠 맡길 생각이다.

몇 명이 도와줄지는 아직 모르지만 일은 공평하게 나누고 싶다. 그래서 ii번 문제마다 정수 xix_i를 정하고, 도와주는 친구는 모두 그 문제에 xix_i분씩 쓴다. 친구들이 ii번 문제에 쓴 시간의 합이 tit_i분 이상이면 그 문제는 완전히 준비된 것이다. 친구가 kk명일 때 xix_ik×xitik \times x_i \ge t_i를 만족하는 가장 작은 정수로 정한다.

앤드루는 문제의 난이도를 잘못 봤다는 것을 알아차리면 tit_i를 1 늘리거나 1 줄인다.

처음 추정한 tit_i가 주어진다. 쿼리 mm개를 주어진 순서대로 처리하라. 각 쿼리는 다음 중 하나다.

  • 1 i: 앤드루가 tit_i를 1 늘린다.
  • 2 i: 앤드루가 tit_i를 1 줄인다.
  • 3 k: 친구 kk명이 도와준다면 친구 한 명이 문제 nn개를 준비하는 데 몇 분을 쓰는지 앤드루가 알고 싶어 한다.

입력

첫째 줄에 문제의 개수 nn과 쿼리의 개수 mm이 주어진다. (1n,m1051 \le n, m \le 10^5)

둘째 줄에 정수 t1,t2,,tnt_1, t_2, \dots, t_n이 주어진다. tit_i는 앤드루가 ii번 문제에 대해 처음 추정한 시간이다. (1ti5×1051 \le t_i \le 5 \times 10^5)

다음 mm개 줄에 쿼리가 한 줄에 하나씩, 두 정수 qqvv로 주어진다. qq가 1이면 tvt_v를 1 늘리고, 2이면 tvt_v를 1 줄인다. 두 경우 모두 1vn1 \le v \le n이다. qq가 3이면 친구 vv명이 도와줄 때 친구 한 명이 쓰는 시간을 구해야 한다. 이 경우 1v5×1051 \le v \le 5 \times 10^5이다.

어떤 쿼리를 처리한 뒤에도 모든 tit_i는 1 이상 5×1055 \times 10^5 이하다.

출력

qq가 3인 쿼리마다 친구 한 명이 문제 nn개를 준비하는 데 쓰는 시간의 합 x1+x2++xnx_1 + x_2 + \dots + x_n을 한 줄에 하나씩 출력한다.