본문 바로가기
알고리즘/종만북

펜윅 트리

by sun__ 2020. 2. 10.

구간 합을 세그트리보다 좀 더 간결하고 메모리를 아끼면서 구하는 구조.

 

다음 코드는 1base.

 

<코드>

struct fwt {
	vector<int> a;
	fwt(int n):a(n+1){}
	int sum(int p) {
		int ret = 0;
		while (p > 0) {
			ret += a[p];
			p -= (p & -p); //최종 비트 지우기
		}
		return ret;
	}
	void add(int p, int x) {
		while (p < a.size()) {
			a[p] += x;
			p += (p & -p); //최종 비트 더하기
		}
	}
};

int main() {
	FAST;
	fwt ft(10);
	for (int i = 1; i <= 10; i++)
		ft.add(i, i);
    //[0~i]합
	for (int i = 1; i <= 10; i++)
		cout << ft.sum(i) << " ";
	cout << '\n';

}

'알고리즘 > 종만북' 카테고리의 다른 글

오일러 경로  (0) 2020.02.12
DICTIONARY - 고대어 사전 (위상정렬)  (0) 2020.02.12
이진 탐색 트리, 트립  (0) 2020.02.10
트리  (0) 2020.02.08
선형 자료구조  (0) 2020.02.07