Atcoder Weekday Contest 5
2/21/2026 · 3 min read
PSAtcoder
Atcoder Weekday 005 풀이
오랜만에 Atcoder를 풀어봤는데 새로운 콘테스트가 생겨서 한번 풀어봤다. 아마 매일 할 수 있으면 할 듯?
대회 링크는 아래와 같다
1. A - Reward of Multiples
그냥 구현해주면 된다.
int n,k;
void solve(){
ri(n, k);
int res = 0;
for(int i = 0; i < n; i++){
int x; ri(x);
res += (x % k == 0 ? x : 0);
}
po(res);
}2. B - Updating the Report Card
이것도...그냥 구현해주면 된다.
int n, m, k, res;
void solve(){
ri(n, m, k);
vi v(n + 1);
for(int i = 1; i <= n; i++) ri(v[i]);
while(m--){
int a,b; ri(a, b);
v[a] = b;
}
for(int i = 1; i <= n; i++) res += (v[i] < k);
po(res);
}3. C - Staircase-Shaped Flower Bed
그냥 간단 그리디
int n, k,res;
void solve(){
ri(n, k);
vi v(n); ri(v);
vi L(n), R(n);
L[0] = v[0];
for(int i = 1; i < n; i++){
L[i] = max<int>(v[i], L[i - 1] - k);
}
R[n - 1] = v[n - 1];
for (int i = n - 2; i >= 0; i--) {
R[i] = max(v[i], R[i + 1] - k);
}
int ans = 0;
for (int i = 0; i < n; i++) {
int B = max<int>(L[i], R[i]);
ans += (B - v[i]);
}
po(ans);
}4. D - Splitting Delivery Packages
간단하게 파라메트릭 서치로 풀린다. 결정문제를 잘 잡아보자.
int n,k,S;
void solve(){
ri(n, k);
vi v(n); for(auto& i : v) ri(i),S += i;
auto check = [&](const int mid) -> bool{
int su = 0,cnt = 0;
for(int i = 0; i < n; i++){
su += v[i];
if(su >= mid){
cnt++;
su = 0;
}
}
return cnt >= k;
};
int L = 0,R = S + 1;
while(L + 1 < R){
int mid = L + R >> 1;
if(check(mid)) L = mid;
else R = mid;
}
po(L);
}5. E - Mountain Height Survey
최대값 세그를 이용하면 쉽게 풀린다.
걍 이정도면 세그 구현문제 아니냐
const int bias = 1 << 17;
vector<int> T(bias << 1, -INF);
void update(int i, int val){
--i |= bias; T[i] = val;
while(i >>= 1) T[i] = max<int>(T[i << 1], T[i << 1 | 1]);
}
int query(int l, int r){
int lv = -INF, rv = -INF;
--l |= bias; --r |= bias;
while(l <= r){
if(l & 1) lv = max<int>(T[l++], lv);
if(~r & 1) rv = max<int>(rv, T[r--]);
l >>= 1, r >>= 1;
}
return max<int>(lv, rv);
}
int n,q;
void solve(){
ri(n, q);
for(int i = 1; i <= n; i++){
int x; ri(x); update(i, x);
}
while(q--){
int a, b; ri(a, b);
if(a > b) swap(a, b);
po(query(a, b));
}
}