Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 대한항공
- persistent indexed tree
- BOJ
- Algorithm
- 백준
- 이베이트미국
- round 420
- 대수학
- persistent segment tree
- round 424
- Ebate Korea
- 마일리지
- Codeforces
- self balancing binary search tree
- indexed tree
- Algebraic Geometry
- 아시아나
- 알고리즘
- algebra
- 7469
- 이베이트코리아
- subgroup
- gallian
- 이베이트
- finite group
- acmicpc
- ccw
- k번째 수
- 구간쿼리
- Ebate USA
Archives
- Today
- Total
Expert스터디 3.5일차(2016.06.06) 본문
우선순위 큐
다음 세 연산을 O(lg n)에 지원한다.
- insert(x)
- get_min()
- remove_min()
이런 연산들을 지원하는 자료구조들로는 다음이 있다. 취향에 맞게 선택하면 된다.
- 코딩 쉬움: heap
- 코딩 어려움: AVL, Red-black tree 등의 Balanced Binary Search Trees
최소공통조상
우선 root를 정한다.
d[node][0] = parent[node]
d[node][i] = d [ d[node][i-1] ] [i-1] // node로부터 2^i 올라간 정점은 2^(i-1) 올라가고 2^(i-1) 올라간 것과 같다.
int goUpward(int A, int depth) // A로부터 depth만큼 올라간 정점
{
int power=0;
for(int i=1;i<=n;i*=2)
{
if(depth & i) A = d[A][power];
++power;
}
return A;
}
int LCA(int A, int B) // depth[A] > depth[B] 가정
{
// A와 B의 높이를 맞춘다.
A = goUpward(A, depth[A]-depth[B]);
if(A==B) return A;
for(int i=[lg n];i>=0;--i)
if(d[A][i]!=d[B][i]) A=d[A][i], B=d[B][i];
return d[A][0];
}
- 문제
1. 11437
2. 11438
3. 2014
4. 3090
5. 3119
'Algorithm > 그밖에2' 카테고리의 다른 글
Expert스터디 5일차(2016.06.13) (0) | 2016.06.17 |
---|---|
Expert스터디 4일차(2016.06.08) (0) | 2016.06.10 |
Expert스터디 3일차(2016.06.01) (0) | 2016.06.04 |
Expert스터디 2일차(2016.05.26) (0) | 2016.06.04 |
Expert스터디 1일차(2016.05.26) (0) | 2016.06.04 |