세그먼트 트리와 비트셋을 활용한 쿼리 문제 해결 (Codeforces Round #538 Div.2 F)
문제 개요
주어진 배열에서 구간 곱과 그 결과에 대한 오일러 피 함수 값을 계산하는 문제입니다. 핵심 아이디어는 오일러 피 함수의 성질과 300 이하의 소수가 62개뿐이라는 점을 활용하는 것입니다.
수학적 배경
구간 [l, r]의 곱을 X라고 할 때, X를 소인수분해하면 다음과 같습니다:
X = ∏ p_i^{c_i} (i = 1 to n)
오일러 피 함수는 곱셈적 함수이므로:
φ(X) = φ(∏ ...
6월 29일 00:36에 게시됨
알고리즘 디버깅 노트: 실수에서 배우는 최적화
경험을 통해 배운 디버깅 사례들을 정리합니다. 비슷한 실수를 반복하지 않기 위한 기록입니다.
위상 정렬: 인덱스 실수
원본 코드:
while (front < rear) {
int cur = queue[front++];
for (int idx = adj[cur]; idx; idx = nxt[idx]) {
int nxtNode = to[idx]; // 정상
indeg[nxtNode]--;
if (indeg[nxtNode] == 0) {
...
6월 25일 21:08에 게시됨
알고리즘 문제 해결을 위한 표준 템플릿 라이브러리
알고리즘 경진대회 참가자들은 다양한 알고리즘과 자료구조를 숙지하고 있어야 하며, 이를 효율적으로 구현하기 위해 여러 템플릿을 정리해두는 것이 중요하다.
코드 작성 시 주의사항
전역 변수 사용은 피해야 한다. 디버깅이 어렵고 코드의 가독성을 해친다.
표준 라이브러리(STL)을 적극 활용하자. 스택, 큐, 벡터 등을 직접 구현하는 것보다 안정적이다.
#define in ...
5월 22일 23:09에 게시됨