리스트 가상화
시간 제한6초메모리 제한1024 MB
높이가 주어진 직사각형을 쌓인 순서대로 삽입하고 삭제하며, 위에서 t부터 b까지 구간과 내부가 겹치는 직사각형의 개수를 구합니다.
문제
한국정보기술진흥원에서 새로 개발한 모바일 어플리케이션의 화면에는 개의 직사각형 항목이 빈틈없이 세로로 나열되어 있다. 위에서 번째 항목의 높이는 이다. 가장 위에 있는 항목의 위쪽 변은 화면의 맨 위와 맞닿아 있다. 사용자의 요청 개를 순서대로 처리해야 한다. 어떤 요청에서도 요청 전에 있던 항목들의 순서가 요청 후에 뒤바뀌지 않는다.
1: 높이가 인 새 직사각형 항목을 위에서 번째에 끼워 넣는다. 인 모든 에 대해 새 항목은 위에서 번째 항목보다 아래에 있게 된다. 인 항목은 끼워 넣기 전에 위에서 번째였던 항목으로, 새 항목보다 아래로 내려간다. 움직인 뒤에도 모든 항목은 빈틈없이 나열되어야 한다.2: 위에서 번째 항목을 지운다. 인 항목은 지우기 전에 위에서 번째였던 항목으로, 모든 항목이 빈틈없이 나열되도록 위로 움직인다.3: 화면 맨 위에서 만큼 떨어진 위치부터 만큼 떨어진 위치까지의 범위에, 직사각형 경계를 제외한 내부의 점이 하나 이상 포함되는 항목의 수를 구한다.
입력
첫 줄에는 처음 화면에 있는 항목의 수 과 요청의 수 가 공백으로 구분되어 주어진다.
둘째 줄에는 각 항목의 높이 이 공백으로 구분되어 주어진다.
셋째 줄부터 개의 줄에 걸쳐 요청이 주어진다. 요청은 다음 형식 중 하나를 따른다.
1(요청 직전에 존재하는 항목의 수) ,2(요청 직전에 존재하는 항목의 수)3
출력
3 요청이 들어올 때마다, 화면 맨 위에서 만큼 떨어진 위치부터 만큼 떨어진 위치까지의 범위에 직사각형 경계를 제외한 내부의 점이 하나 이상 포함되는 항목의 수를 한 줄에 출력한다.