풀이
구현이 좀 귀찮은데
잘 따져서 슥슥 짜주면 된다.
코드
#include <cstdio>
int n, m, i, x, y, a[100002];
int inc[100002], dec[100002];
int main() {
scanf("%d %d", &n, &m);
for (i = 1; i <= n; i++) scanf("%d", &a[i]);
inc[1] = dec[1] = 1;
for (i = 2; i <= n; i++) inc[i] = inc[i - 1] + (a[i - 1] >= a[i]);
for (i = 2; i <= n; i++) dec[i] = dec[i - 1] + (a[i - 1] <= a[i]);
for (i = 1; i <= m; i++) {
scanf("%d %d", &x, &y);
int ans = (inc[x - 1] + inc[n] - inc[y]) + (dec[y] - dec[x - 1]);
if (x - 1 >= 1) ans += (a[x - 1] > a[x]) - (a[x - 1] < a[y]);
if (y + 1 <= n) ans += (a[y] < a[y + 1]) - (a[x] < a[y + 1]);
printf("%d\n", ans);
}
return 0;
}
아무말
백준, 백준 온라인 저지, BOJ, Baekjoon Online Judge, C, C++, 씨, 씨쁠쁠, JAVA, algorithm, 자바, 알고리즘, 자료구조, 문제, 문제 풀이, 풀이