๋ฌธ์
ํ์ด
๋ฌธ์ ๋ฅผ ์ ๋ฆฌํ๋ฉด
- ๋ฐฐ์ด์ ์ฌํ์ด ๋ค์ด์๊ณ , ์ฌํ์ ๋ง์ ์ซ์๋ก ํํ๋๋ค. (์ต๋ 2,000,000,000๊ฐ)
- A๊ฐ 1์ธ query๊ฐ ๋ค์ด์ค๋ฉด ๋ฐฐ์ด์์ B๋ฒ์งธ๋ก ๋ง์๋ (B๋ฒ์งธ๋ก ์์) ์ฌํ์ ๊บผ๋ด์ค๋ค. (์ถ๋ ฅํ๋ค)
์ฌํ์ ๋ง์ 1 ~ 1,000,000 ์ด๋ฏ๋ก ๋ฐฑ๋ง๊ฐ ๊ธธ์ด์ ๋ฐฐ์ด์ ๋๊ณ ๊ฐ Index์ ๊ทธ ๋ง์ ๊ฐ์ง ์ฌํ์ ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ ์๊ฐํด๋ณผ ์ ์๋ค.
๊ทธ๋ฐ ํ์ ์ฌํ์ ๊บผ๋ด๋ ค๋ฉด ์์์๋ถํฐ B๋ฒ์งธ ์ฌํ์ ๋ง์ ์ฐพ์ ๋ ๋์ผํ๋ค.
๊ทธ๋ฌ๋ฉด query๊ฐ ์ต๋ 100,000, ๋ฐฐ์ด ์ต๋ ๊ธธ์ด๊ฐ 1,000,000์ด๋๊น... ๋ฌด์กฐ๊ฑด ์๊ฐ์ด๊ณผ๊ณ ๋ ํจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ์ ์ฐพ์์ผํ๋ค.
์กฐ๊ธ๋ง ์๊ฐ์ ๋ฐ๊ฟ๋ณด์.
์์์๋ถํฐ B๋ฒ์งธ ์ฌํ์ ์ฐพ๋๋ค = ๋ฎ์ ์ซ์๋ถํฐ ์ฌํ์ด ๋ช๊ฐ์ฉ ์๋ ๋์ ํฉ
์ ๊ตฌํด์ผํ๋ค.๋์
ํ๋ฉด ์ญ์ ์ธ๊ทธ๋จผํธ ํธ๋ฆฌ
์ด ์์ด๋์ด๋ฅผ ๊ฐ์ง๊ณ ํ์ด๋ฅผ ์ ๋ฆฌํด๋ณด๋ฉด
- ์ธ๊ทธ๋จผํธ ํธ๋ฆฌ์ ์ฌํ ๋ง ๊ตฌ๊ฐ๋ณ ์ฌํ์ ๊ฐ์๋ฅผ ๊ตฌํด๋๋ค.
- 1 ~ x ๊ตฌ๊ฐ์ ์ฌํ ๊ฐ์๊ฐ B๊ฐ ๋๋ x ๊ฐ ์ํ๋ ์ฌํ ๋ง์ผ ๊ฒ์ด๋ค.
๊ทผ๋ฐ 2๋ฒ์์ x๋ฅผ ๊ตฌํ ๋ 1๋ถํฐ ์์ฐจ์ ์ผ๋ก ๊ณ์ฐํ๋ฉด linearํ๊ธฐ ๋๋ฌธ์ ์ธ๊ทธ๋จผํธ ํธ๋ฆฌ๋ฅผ ๋ง๋ ๋ณด๋์ด ์๋ค.
๋ฐ๋ผ์ 1์ ๊ณ ์ ํด๋๊ณ ์ด๋ถํ์
์ผ๋ก x๋ฅผ ๊ตฌํ๋ฉด ์๊ฐ์ ๋จ์ถํ ์ ์๋ค.
Code
#include <iostream>
#define MAXN 1000000
int tree[1<<21];
int n;
int query(int node, int s, int e, int l, int r) {
if (r < s || e < l)
return 0;
if (l <= s && e <= r)
return tree[node];
int mid = (s + e) / 2;
return query(node * 2, s, mid, l, r) + query(node * 2 + 1, mid + 1, e, l, r);
}
void update(int node, int s, int e, int idx, int val) {
if (idx < s || e < idx)
return;
tree[node] += val;
if (s == e) return;
int mid = (s + e) / 2;
update(node * 2, s, mid, idx, val);
update(node * 2 + 1, mid + 1, e, idx, val);
}
int main() {
scanf("%d", &n);
for (int i = 0; i < n;i++) {
int a, b, c;
scanf("%d %d", &a, &b);
if (a == 1) {
int s = 1, e = MAXN;
while (e - s > 0) {
int mid = (s + e) / 2;
int q = query(1, 1, MAXN, 1, mid);
if (q < b)
s = mid + 1;
else
e = mid;
}
printf("%d\n", e);
update(1, 1, MAXN, e, -1);
} else if (a == 2) {
scanf("%d", &c);
update(1, 1, MAXN, b, c);
}
}
}
์ฌ์ค ๋ก์ง์ ์์ ๋์ผํ๋ ํ์ด์ฌ์ผ๋ก ํ๋ ์๊พธ ์๊ฐ์ด๊ณผ๊ฐ ๋์... ๊ทธ๋ฅ cpp๋ก ํ๋ ํต๊ณผํ๋ค.
ํธ๋ฆฌํจ์๋ ๋๊ฐ๊ฐ ์๋ ๋ฒ...ใ
ใ
'๐ค ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[backjoon] 10217 KCM Travel (python) (0) | 2021.08.06 |
---|---|
[baekjoon] 1162 ๋๋กํฌ์ฅ (0) | 2021.08.05 |
[baekjoon] 11003 ์ต์๊ฐ ์ฐพ๊ธฐ (python) (0) | 2021.07.27 |
[baekjoon] 1806 ๋ถ๋ถํฉ (python) (0) | 2021.07.27 |
[baekjoon] 2580 ์ค๋์ฟ (python) (0) | 2021.07.26 |