피아노 체조
피아노를 사랑하는 시은이는 매일 아침 피아노 체조를 한다. 시은이는 N개의 악보를 가지고 있으며, 1번부터 N번까지의 번호로 부른다. 각 악보는 1 이상 109 이하의 정수로 표현되는 난이도를 가지고 있다. 난이도를 나타내는 수가 클수록 어려운 악보이다. 1 ≤ x ≤ y ≤ N 을 만족하는 두 정수 x, y를 골라 x번부터 y번까지의 악보를 번호 순서대로 연주하는 것이 피아노 체조이다.
시은이는 피아노 체조를 할 때, 지금 연주하는 악보가 바로 다음에 연주할 악보보다 어렵다면 실수를 한다. 다시 말하자면, i(x ≤ i < y)번 악보의 난이도가 i + 1번 악보의 난이도보다 높다면 실수를 한다. 특히, 마지막으로 연주하는 y번 악보에선 절대 실수하지 않는다. 시은이는 오늘도 피아노 체조를 하기 위해 두 정수 x와 y를 골랐고, 문득 궁금한 것이 생겼다. 오늘 할 피아노 체조에서 실수하는 곡은 몇 개나 될까?
입력
첫 번째 줄에 악보의 개수 N(1 ≤ N ≤ 100,000)이 주어진다.
두 번째 줄에 1번 악보부터 N번 악보까지의 난이도가 공백을 구분으로 주어진다.
세 번째 줄에 질문의 개수 Q(1 ≤ Q ≤ 100,000)이 주어진다.
다음 Q개의 줄에 각 줄마다 두 개의 정수 x, y(1 ≤ x ≤ y ≤ N)가 주어진다.
출력
x번부터 y번까지의 악보를 순서대로 연주할 때, 몇 개의 악보에서 실수하게 될지 0 이상의 정수 하나로 출력한다. 각 출력은 개행으로 구분한다.
누적합을 이용하면 정해진 시간 내로 해결할 수 있는 문제입니다.1번 악보부터 N번 악보까지의 실수의 합을 저장합니다.ex) prefix[5] : 1번부터 5번 악보까지 연주했을 때 실수의 합
package BackJoon;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
// 피아노 체조
public class BOJ21318 {
static int prefixSum[];
static int N, Q;
private void solution() throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
N = Integer.parseInt(br.readLine());
String[] s = br.readLine().split(" ");
prefixSum = new int[N + 1];
prefixSum[1] = 0;
for (int i = 1; i < N; i++) {
int a = Integer.parseInt(s[i - 1]);
int b = Integer.parseInt(s[i]);
prefixSum[i + 1] = prefixSum[i] + ((a > b) ? 1 : 0);
}
Q = Integer.parseInt(br.readLine());
for (int i = 0; i < Q; i++) {
String[] input = br.readLine().split(" ");
int from = Integer.parseInt(input[0]);
int to = Integer.parseInt(input[1]);
bw.append(prefixSum[to] - prefixSum[from] + "\n");
}
bw.flush();
}
public static void main(String[] args) throws Exception {
new BOJ21318().solution();
}
}
'PS > 백준' 카테고리의 다른 글
[ BOJ 12015 ] 가장 긴 증가하는 부분 수열 2 ( Java ) (0) | 2024.06.23 |
---|---|
[ BOJ 16434 ] 드래곤 앤 던전 ( JAVA (0) | 2024.06.22 |
[ BOJ 20955 ] 민서의 응급 수술 ( java ) (1) | 2024.06.13 |
[ BOJ 1074 ] Z ( JAVA ) (0) | 2024.03.06 |
[ BOJ 7662 ] 이중 우선순위 큐 ( JAVA ) (1) | 2024.01.11 |