#include <iostream>
#include <vector>
using namespace std;
int main(){
int N,K;
scanf("%d %d", &N, &K);
vector<int> sum(N+1,0);
for(int m=0; m<N; m++) {
int n;
scanf("%d", &n);
sum[m+1] = sum[m] + n;
}
for(int m=0; m<K; m++){
int A,B;
scanf("%d %d", &A, &B);
printf("%.2f\n", (double)(sum[B] - sum[A-1])/(B-A+1));
}
}
O(n) 대신 O(1) 시간복잡도로 문제를 해결할 수 있는 구간 합 알고리즘을 이 문제를 풀면서 알게 되었고, 해당 알고리즘을 그대로 적용했다.
다른 점은 평균을 구해야 하는건데, 분자와 분모 모두 괄호를 사용해준 후 double로 type casting을 해주고 "%.2f" 로 소수점 둘째 자리까지 출력해주어야 오차를 고려한 정답이 나온다.
[백준(BOJ)] 1535번: 안녕 (C++) (0) | 2023.07.16 |
---|---|
[백준(BOJ)] 12865번: 평범한 배낭 (C++) (0) | 2023.04.14 |
[백준(BOJ)] 11659번: 구간 합 구하기 4 (C++) (0) | 2023.04.11 |
[Softeer] 바이러스 (C++) (1) | 2023.04.08 |
[Softeer] A+B (C++) (0) | 2023.03.28 |