본문 바로가기
IT/BOJ

백준(BOJ) 1275 커피숍2 **

by 빨강자몽 2018. 9. 28.

# 세그먼트 트리 # 펜윅

세그먼트트리 보다는 펜윅으로 푸는것이 더 좋은 방법인 것 같다.


# 실수 했던 점

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