Fenwick-tree (binary indexed tree) 작성일 2021-01-31 | In data structure | views 펜윅 트리 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758#include <bits/stdc++.h> #define ll long long using namespace std; //크기는 n=sz. const int sz=1000000; ll BIT[sz+1]; ll arr[sz+1]; //sum(i) : 1번째~i번째 수의 총합 ll sum(int i) { ll ret=0; while(i>0) { ret+=BIT[i]; i-=i&-i; } return ret; } void update(int i, ll diff) { while(i<=sz) { BIT[i]+=diff; i+=i&-i; } } int main(void) { int n,m,k; scanf("%d %d %d",&n,&m,&k); for(int i=1;i<=n;i++) { scanf("%lld",&arr[i]); update(i,arr[i]); } int q=m+k; while(q--) { int a; scanf("%d",&a); if(a==1) { int b;ll c; scanf("%d %lld",&b,&c); update(b,c-arr[b]); arr[b]=c; } else { int l,r; scanf("%d %d",&l,&r); printf("%lld\n",sum(r)-sum(l-1)); } } return 0; } 시간복잡도 전처리 : $O(NlogN)$ 구간 합 구하기 : $O(logN)$ 값 업데이트 : $O(logN)$ N : 수의 개수 관련문제 백준2042 : 구간 합 구하기