# 세그먼트 트리 # 펜윅
세그먼트트리 보다는 펜윅으로 푸는것이 더 좋은 방법인 것 같다.
# 실수 했던 점
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 |