화면 보호기

시간 제한2초메모리 제한128 MB

요약
구간별 직선으로 된 바닥과 수면 높이가 주어질 때, 바닥 높이나 수면 높이를 갱신하며 잠긴 영역의 넓이를 소수점 세 자리까지 구한다.
난이도

보통10점 중 6점

유형
기하, 세그먼트 트리, 구현
정답자
아직 제출이 없습니다

문제

상근이는 새 화면 보호기를 설치했다. 컴퓨터를 55분 동안 사용하지 않으면 화면 보호기가 실행되어, 수족관과 그 안에서 헤엄치는 물고기를 보여 준다. 설정 화면에서는 수족관 바닥의 모양과 수면의 높이를 바꿀 수 있다.

수족관은 너비가 N−1N-1인 2차원 평면으로 나타낸다. 가장 왼쪽 xx좌표는 00, 가장 오른쪽 xx좌표는 N−1N-1이고, 각 정수 xx좌표 ii에는 바닥의 높이 HiH_i가 정해져 있다. 바닥은 인접한 두 좌표 ii와 i+1i+1에 대해 점 (i,Hi)(i, H_i)와 (i+1,Hi+1)(i+1, H_{i+1})을 잇는 선분으로 이루어진다.

수면의 높이가 hh이면 바닥과 직선 y=hy = h 사이의 공간이 모두 물로 채워진다. 바닥이 hh보다 높은 부분은 물에 잠기지 않는 섬이 된다.

상근이가 설정에서 바닥의 높이나 수면의 높이를 바꿀 때마다, 그 순간 물로 채워지는 영역의 넓이를 구하려고 한다.

입력

첫째 줄에 두 양의 정수 NN과 MM이 주어진다. MM은 상근이가 설정을 바꾼 횟수이다. (3≤N≤100,0003 \le N \le 100{,}000, 1≤M≤100,0001 \le M \le 100{,}000)

둘째 줄에는 바닥의 초기 높이 H0,H1,…,HN−1H_0, H_1, \dots, H_{N-1}이 공백으로 구분되어 주어진다. (0≤Hi≤10000 \le H_i \le 1000)

다음 MM개의 줄에는 상근이가 바꾼 내용이 한 줄에 하나씩 주어지며, 형식은 다음 두 가지 중 하나이다.

  • Q h : 수면의 높이를 hh로 바꾼다. (0≤h≤10000 \le h \le 1000)
  • U i h : xx좌표가 ii인 곳의 바닥 높이를 hh로 바꾼다. 즉 Hi=hH_i = h가 된다. (0≤i≤N−10 \le i \le N-1, 0≤h≤10000 \le h \le 1000)

출력

Q로 시작하는 변경이 주어질 때마다, 그 순간 물로 채워지는 영역의 넓이를 소수점 셋째 자리까지 출력한다.

예제3

  1. 예제 1

    입력
    3 2
    20 20 20
    Q 20
    Q 30
    
    예상 출력
    0.000
    20.000
    
  2. 예제 2

    입력
    3 5
    0 2 0
    Q 2
    U 1 1
    Q 1
    U 1 10
    Q 5
    
    예상 출력
    2.000
    1.000
    2.500
    
  3. 예제 3

    입력
    7 7
    0 2 1 3 2 1 0
    Q 1
    Q 2
    Q 3
    U 3 0
    Q 1
    Q 2
    Q 3
    
    예상 출력
    0.750
    3.750
    9.000
    1.500
    6.000
    12.000