์ธ๋ฑ์ค ํธ๋ฆฌ
Coding Test
2022. 10. 3. 00:10
2042๋ฒ: ๊ตฌ๊ฐ ํฉ ๊ตฌํ๊ธฐ (acmicpc.net)
2042๋ฒ: ๊ตฌ๊ฐ ํฉ ๊ตฌํ๊ธฐ
์ฒซ์งธ ์ค์ ์์ ๊ฐ์ N(1 ≤ N ≤ 1,000,000)๊ณผ M(1 ≤ M ≤ 10,000), K(1 ≤ K ≤ 10,000) ๊ฐ ์ฃผ์ด์ง๋ค. M์ ์์ ๋ณ๊ฒฝ์ด ์ผ์ด๋๋ ํ์์ด๊ณ , K๋ ๊ตฌ๊ฐ์ ํฉ์ ๊ตฌํ๋ ํ์์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๋์งธ ์ค๋ถํฐ N+1๋ฒ์งธ ์ค
www.acmicpc.net
#if 01
#include <iostream>
#include <string.h>
using namespace std;
long long arr[1000001], tree[1000001];
int n, m, k; // ๋ฐ์ดํฐ ๊ฐฏ์, ๋ณ๊ฒฝ ํ์, ๊ตฌ๊ฐํฉ ๊ณ์ฐ ํ์
// i๋ฒ์งธ ์๊น์ง์ ๋์ ํฉ์ ๊ณ์ฐํ๋ ํจ์
// 0์ด ์๋ ๋ง์ง๋ง ๋นํธ๋งํผ ๋นผ๋ฉด์ ๊ตฌ๊ฐ๋ค์ ๊ฐ์ ํฉ ๊ณ์ฐ
long long prefixSum(int i) {
long long result = 0;
while (i > 0) {
result += tree[i];
i -= (i & -i);
}
return result;
}
// i๋ฒ์งธ ์๋ฅผ dif๋งํผ ๋ํ๋ ํจ์
// 0์ด ์๋ ๋ง์ง๋ง ๋นํธ๋งํผ ๋ํ๋ฉด์ ๊ตฌ๊ฐ๋ค์ ๊ฐ ๋ณ๊ฒฝ
void update(int i, long long dif) {
while (i <= n) {
tree[i] += dif;
i += (i & -i);
}
}
long long intervalSum(int start, int end) {
return prefixSum(end) - prefixSum(start - 1);
}
int main(void) {
memset(tree, 0, sizeof(tree));
cin >> n >> m >> k;
for (int i = 1; i <= n; i++) {
long long x;
cin >> x;
arr[i] = x;
update(i, x);
}
int cnt = 0;
while (cnt++ < m + k) {
int op;
cin >> op;
if (op == 1) {
int index;
long long value;
cin >> index >> value;
update(index, value - arr[index]);
arr[index] = value;
}
else {
int start, end;
cin >> start >> end;
cout << intervalSum(start, end);
}
}
}
# endif
'Coding Test' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ด์งํ์ (0) | 2022.10.03 |
---|---|
compare struct์ function ์ฐจ์ด (1) | 2022.09.29 |
BOJ1944_๋ณต์ ๋ก๋ด (0) | 2022.09.27 |
BOJ1922_๋คํธ์ํฌ ์ฐ๊ฒฐ(ํฌ๋ฃจ์ค์นผ, C++) (0) | 2022.09.27 |
BOJ2665_๋ฏธ๋ก๋ง๋ค๊ธฐ (1) | 2022.09.23 |