https://www.acmicpc.net/problem/17390
코드
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
#define FASTIO ios::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
int main()
{
FASTIO;
int n, q;
cin >> n >> q;
vector<int> v(n);
vector<int> sum(n+1);
for (int i = 0; i < n; i++) cin >> v[i];
sort(v.begin(), v.end());
sum[1] = v[0];
for (int i = 2; i <= n; i++) sum[i] = sum[i - 1] + v[i-1];
while (q--)
{
int a, b;
cin >> a >> b;
cout << sum[b] - sum[a - 1] << "\n";
}
return 0;
}
코드 설명
먼저 수열의 길이 N과 질문의 개수 Q를 입력받는다. 이후 N개의 정수를 입력받는데, 이를 벡터에 저장한다. 이후 벡터를 오름차순(비내림차순)으로 정렬해준다.
이후 누적합을 구해준다. 이전까지의 수열 원소의 합 + 현재 원소의 합을 sum[i]에 저장하면 된다. 이후 질문의 개수대로 시작과 끝을 입력받는다. 시작 위치 a~끝 위치 b까지의 합은 처음~b까지의 합에서 처음~a-1까지의 합을 빼주면 된다.
느낀 점
N개의 정수를 입력받고 나서 오름차순으로 정렬해준 뒤에 누적합 원리를 써서 풀면 되는 문제다. 바로 흐름 잡고 풀었는데도 시간초과가 나서 당황했는데, 알고보니 빠른 입출력을 적용하지 않았었다.
바로 main함수 시작부에 FASTIO; 적어주고 다시 제출하니 통과했다.
'PS (C, C++)' 카테고리의 다른 글
[백준/C++] 26122 가장 긴 막대 자석 (0) | 2024.06.20 |
---|---|
[백준/C++] 29519 케이크 두 개 (2) | 2024.03.24 |
[백준/C++] 9470 Strahler 순서 (0) | 2024.02.25 |
[백준/C++] 31423 신촌 통폐합 계획 (0) | 2024.02.18 |
[백준/C++] 31418 스펀지 (0) | 2024.02.18 |