AtCoder Beginner Contest 330
ย - Last update: 2023-11-25

ABC 330 Upsolving

  • ๋Œ€ํšŒ ์ฐธ๊ฐ€ ์œ ๋ฌด: Y
  • ์ตœ์ข… Performance: 868 (Rank: 3161 / 10234)
  • Round ๋งํฌ: Top / Tasks
  • ๋ฌธ์ œ๋ณ„ ๊ฒฐ๊ณผ
ABCDEFG
AC
AC
AC
AC
---

E๋ฅผ 1๋ถ„ ์ฐจ์ด๋กœ ์ œ์ถœํ•˜์ง€ ๋ชปํ•œ ์…‹์ด๋‹ค. ๊ทธ๋ž˜์„œ ํ•œ๋ฌธ์ œ ์ฐจ์ด๋กœ ์ƒ๋‹นํžˆ ๋งํ•œ ํผํฌ๊ฐ€ ๋‚˜์™”๋‹ค.

A - Counting Passes

Do you know ๋ฐ˜๋ณต๋ฌธ?

B - Minimize Abs 1

B ์น˜๊ณ  ๋‚œ์ด๋„๊ฐ€ ์žˆ๋Š” ๋ฌธ์ œ์˜€๋‹ค. ์ถœ๋ ฅ ๋ฌธ์ œ๋กœ 1ํ‹€์„ ํ–ˆ๋‹ค. (์ผ€์ด์Šค์ค‘ 1๊ฐœ์—์„œ ๊ณต๋ฐฑ ์ถœ๋ ฅ์„ ์•ˆํ–ˆ๋‹ค;;) L ๋ณด๋‹ค ์™ผ์ชฝ์˜ ์ˆ˜์ผ ๊ฒฝ์šฐ L์ด, R๋ณด๋‹ค ์˜ค๋ฅธ์ชฝ์˜ ์ˆ˜์ผ ๊ฒฝ์šฐ R์ด, ๊ทธ ์‚ฌ์ด์— ๋“ค์–ด์˜ฌ ๊ฒฝ์šฐ ์ž๊ธฐ ์ž์‹ ์ด ๋˜์–ด์•ผ ๊ฑฐ๋ฆฌ๊ฐ€ ์ตœ์†Œ๊ฐ€ ๋œ๋‹ค.

C - Minimize Abs 2

์ˆ˜ํ•™ ๋ฌธ์ œ. ์ˆ˜ํ•™ ๋ฌธ์ œ์ธ ๋งŒํผ ์†”๋ฃจ์…˜์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋Š”๋ฐ, ๋‚˜๋Š” ๊ทธ๋ƒฅ ๋งค๊ฐœ๋ณ€์ˆ˜ํƒ์ƒ‰์œผ๋กœ ํ•ด์น˜์› ๋‹ค. ์ •ํ•ด๋Š” O(D)O(\sqrt D)์ด๋‹ค.

void solve() {
scanf("%lld", &N);
ll sN = sqrt(N);
ll ans = 0x7FFFFFFFFFFFFFFFLL;
for(ll y = 0; y <= sN; ++y) {
ll l = 0, r = sN + 1;
ll yy = y * y;
for(ll m = (l + r) >> 1; l <= r; m = (l + r) >> 1) {
ll cur = yy + m * m;
if (cur <= N) {
l = m + 1;
ans = min(ans, min(abs(cur - N), abs(yy + (m + 1) * (m + 1) - N)));
} else {
r = m - 1;
}
}
}
printf("%lld\n", ans);
}

D - Counting Ls

๋ฌธ์ œ๋Š” ์žฅํ™ฉํ•œ๋ฐ, ๊ฒฐ๊ตญ ์ผ€์ด์Šค๋ฅผ ๋”ฐ์ ธ๊ฐ€๋ฉด์„œ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋”ฐ์ ธ๋ณด๋ฉด, ๊ฐ row, col๋ณ„๋กœ o์˜ ์ˆ˜๋ฅผ ๋ฏธ๋ฆฌ ์„ธ์–ด๋‘๊ณ , ๋ชจ๋“  (i,j)(i, j) ์Œ์— ๋Œ€ํ•ด ans += (rcnt[i] - 1) * (ccnt[j] - 1)๋ฅผ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด ๋‹ต์ด๋‹ค.

E - Mex and Update (Upsolved)

AC๊ฐ€ ๋‚˜์™”๋Š”๋ฐ 1๋ถ„ ๋Šฆ์–ด์„œ ์ œ์ถœ์„ ๋ชปํ–ˆ๋‹ค. mex ์—ฐ์‚ฐ์€ ์ผ์ข…์˜ ์›ฐ๋…ผ ์—ฐ์‚ฐ์ด๊ณ (๋‹˜๊ฒŒ์ž„ ๋“ฑ์—์„œ ์“ฐ์ด๋Š”๋“ฏ), ์–ด๋–ป๊ฒŒ ๋น ๋ฅด๊ฒŒ ๋‹ค์Œ ์ˆ˜๋ฅผ ์ฐพ๋Š”์ง€๊ฐ€ ๊ด€๊ฑด์ด์—ˆ๋‹ค. ์ •ํ•ด๋Š” set์ด๋‚˜ Segment Tree์˜€๊ณ , ๋‚˜๋Š” ๊ตฌ๊ฐ„ ๊ด€๋ฆฌํ•˜๋Š” ์‹์œผ๋กœ ํ’€์—ˆ๋‹ค. ๋„ˆ๋ฌด ์–ด๋ ต๊ฒŒ ํ’€์–ด์„œ ์‹œ๊ฐ„๋‚ด์— ๋ชป๋‚ธ๊ฑฐ ๊ฐ™๋‹ค.

๐Ÿ‘‰ ํŽผ์น˜๊ธฐ
int N, Q;
int A[200010];
map<int, int> M;
struct Range {
int l, r;
bool operator<(const Range& t) const {
if (l != t.l) return l < t.l;
return r < t.r;
}
};
set<Range> S;
void solve() {
scanf("%d %d", &N, &Q);
for(int i = 1; i <= N; ++i) {
scanf("%d", &A[i]);
if (M.find(A[i]) == M.end()) {
M[A[i]] = 0;
}
M[A[i]]++;
}
for(auto& item: M) {
S.insert({item.first, item.first});
}
for(auto sit = S.begin(); sit != S.end();) {
Range cur = *sit;
auto it = sit;
++it;
if (it == S.end()) {
break;
} else {
Range nitem = *it;
if (cur.r + 1 == nitem.l) {
S.erase(it);
S.erase(sit);
sit = S.insert({cur.l, nitem.r}).first;
} else {
sit = it;
}
}
}
for(auto& item: S) {
_D("[d] %d ~ %d\n", item.l, item.r);
}
for(int q = 0; q < Q; ++q) {
int idx, val; scanf("%d %d", &idx, &val);
int old = A[idx];
A[idx] = val;
M[old]--;
// ๊ธฐ์กด๊บผ ๋นผ๊ธฐ
if (M[old] == 0) {
auto it = S.lower_bound({old, 0x7FFFFFFF});
--it; // ๋ฌด์กฐ๊ฑด ์žˆ์Œ ๋ฌธ์ œ์กฐ๊ฑด์—์„œ
_D("[d] delete %d!\n", old);
Range cur = *it;
S.erase(cur);
if (cur.r == old) {
S.insert({cur.l, cur.r - 1});
_D("(%d, %d) -> (%d, %d)\n", cur.l, cur.r, cur.l, cur.r - 1);
} else if (cur.l == old) {
S.insert({cur.l + 1, cur.r});
_D("(%d, %d) -> (%d, %d)\n", cur.l, cur.r, cur.l + 1, cur.r);
} else { // ์‚ฌ์ด
S.insert({cur.l, old - 1});
S.insert({old + 1, cur.r});
_D("(%d, %d) -> (%d, %d) / (%d, %d)\n", cur.l, cur.r, cur.l, old - 1, old + 1, cur.r);
}
M.erase(old);
}
// ์‹ ๊ทœ ๋„ฃ๊ธฐ
if (M.find(val) == M.end()) {
_D("[d] add %d!\n", val);
auto it = S.lower_bound({val, 0});
if (it == S.begin()) {
Range nitem = *it;
if (nitem.l - 1 == val) {
S.erase(it);
S.insert({val, nitem.r});
} else {
S.insert({val, val});
}
} else {
auto pit = it;
--pit;
Range nitem = *it;
Range pitem = *pit;
if (pitem.r + 1 == val && nitem.l - 1 == val) {
S.erase(it);
S.erase(pit);
S.insert({pitem.l, nitem.r});
} else if (pitem.r + 1 == val) {
S.erase(pit);
S.insert({pitem.l, val});
} else if (nitem.l - 1 == val) {
S.erase(it);
S.insert({val, nitem.r});
} else {
S.insert({val, val});
}
}
M[val] = 0;
}
M[val]++;
auto it = S.begin();
Range cur = *it;
_D("[begin] (%d, %d)\n", cur.l, cur.r);
if (cur.l == 0) {
printf("%d\n", cur.r + 1);
} else {
printf("0\n");
}
}
}

F - Minimize Bounding Square (To be upsolved...)

๋ญ”๊ฐ€ ์›ฐ๋…ผ์˜ ๋ƒ„์ƒˆ๊ฐ€ ๋‚˜์„œ ์—…์†”๋น™ ์˜ˆ์ •.

G

Skip

๐Ÿท๏ธ ์ฃผ์ œ ๋ชฉ๋ก: