# 세그먼트 트리 # 펜윅
세그먼트트리 보다는 펜윅으로 푸는것이 더 좋은 방법인 것 같다.
# 실수 했던 점
arr배열에 곱하기 4를 빼먹었다.
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <vector> #include <queue> #include <set> #include <map> #define MAX 100005 #define INF 987654321 #define MOD 31991 #pragma warning(disable:4996) using namespace std; typedef long long ll; typedef pair<int, int> pi; ll n, q, x,y,a,b; ll arr[MAX*4]; ll update(ll c, ll l, ll r, ll f, ll val) { if (!(l <= f && f <= r)) return arr[c]; else if (l == r) return arr[c] = val; ll mid = (l + r) / 2; return arr[c] = update(c * 2, l, mid, f, val) + update(c * 2 + 1, mid + 1, r, f, val); } ll query(ll c, ll l, ll r, ll s, ll f) { if (r < s || f < l) return 0; else if (s <= l && r <= f) return arr[c]; ll mid = (l + r) / 2; return query(c * 2, l, mid, s, f) + query(c * 2 + 1, mid + 1, r, s, f); } int main() { scanf("%lld %lld", &n, &q); for (ll i = 1; i <= n; i++) { scanf("%lld", &a); update(1, 1, n, i, a); } while (q--) { scanf("%lld %lld %lld %lld", &x, &y, &a, &b); if (x > y) swap(x, y); printf("%lld\n", query(1, 1, n, x, y)); update(1, 1, n, a, b); } return 0; }
'IT > BOJ' 카테고리의 다른 글
백준(BOJ) 9240 로버트 후드 *** (0) | 2018.09.28 |
---|---|
백준(BOJ) 1965 상자넣기 * (0) | 2018.09.28 |
백준(BOJ) 2042 구간 합 구하기 ** (0) | 2018.09.17 |
백준(BOJ) 2512 예산 ** (0) | 2018.09.14 |
백준(BOJ) 4526 트리 * (0) | 2018.09.08 |