https://atcoder.jp/contests/typical90/tasks/typical90_j
010 - Score Sum Queries(★2)
AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.
atcoder.jp
구글 번역을 한번 돌리고 읽어보니 별 2개짜리라 그런가 풀이가 바로 보였다.
1~N번 학생이 1번수업 또는 2번수업에서 몇점을 맞았는지가 나온다.
쿼리가 주어질때 A ~ B번 학생들이 1번수업 2번수업의 점수 총합을 각각 구하는것이다.
바로 생각나는것이? prefix Sum이다. 처음에 전처리를 해놓고 쿼리마다 출력하면 된다.
#define _CRT_SECURE_NO_WARNINGS
#include <bits/stdc++.h>
#include <unordered_set>
#define rep(i, n) for (int i = 0; i < (int)(n); ++i)
#define rep1(i, n) for (int i = 1; i <= (int)(n); ++i)
#define range(x) begin(x), end(x)
#define sz(x) (int)(x).size()
#define pb push_back
#define x first
#define y second
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef pair<int, int> pii;
typedef pair<long long, long long> pll;
typedef vector<int> vi;
typedef vector<long long> vll;
const ll INF = 100000000;
const double pi = 3.14159265358979;
const ll MOD = 1000000007;
int prefix1[100002];
int prefix2[100002];
int N;
int Q;
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> N;
rep1(i, N)
{
int a, b;
cin >> a >> b;
if (a == 1)
{
prefix1[i] = prefix1[i - 1] + b;
prefix2[i] = prefix2[i - 1];
}
else if(a == 2)
{
prefix1[i] = prefix1[i - 1];
prefix2[i] = prefix2[i - 1] + b;
}
}
cin >> Q;
rep(i, Q)
{
int a, b;
cin >> a >> b;
cout << prefix1[b] - prefix1[a-1] << " " << prefix2[b] - prefix2[a-1] << "\n";
}
return 0;
}
'알고리즘 > atcoder90제' 카테고리의 다른 글
앳코더90 - 011 - Gravy Jobs(★6) (0) | 2024.03.17 |
---|---|
앳코더90 - 012 - Red Painting(★4) (0) | 2024.03.13 |
앳코더90 - 009 - Three Point Angle(★6) (0) | 2023.08.14 |
앳코더90 - 008 - AtCounter(★4) (0) | 2023.08.09 |
앳코더90 - 007 - CP Classes(★3) (0) | 2023.08.08 |