Codeforces Round 903 (Div. 3) 풀이
이번 라운드의 A~G번 문제에 대한 핵심 아이디어와 구현 방법을 정리합니다.
A. Don't Try to Count
문자열 t가 s의 연속 부분문자열이 되도록 만드는 문제입니다. s를 반복하여 이어붙이면 길이가 2배로 늘어나는 특성을 활용합니다. n·m ≤ 25 조건 덕분에 최대 5번만 반복하면 충분합니다.
#include <bits/stdc++.h>
using namespace std;
bool isSubstr(const s ...
7월 31일 23:32에 게시됨
펜윅 트리를 활용한 역쌍 계산 알고리즘
역쌍(Inversion Pair)이란 주어진 양의 정수 배열에서 인덱스 i가 j보다 작으면서 값은 a[i]가 a[j]보다 큰 경우, 즉 i < j && a[i] > a[j]를 만족하는有序对(순서쌍)를 의미한다.
这类 문제를 풀 때 가장 먼저 떠올리는 방법은 병합 정렬을 이용하는 것이다. 그러나 今回は 펜윅 트리(Fenwick Tree) 또는 BIT(Binary Indexed Tree)라는 자료구조를 활용하여 ...
7월 25일 03:34에 게시됨
바이너리 인덱스 트리: 구현과 활용
바이너리 인덱스 트리
1. 점 업데이트와 구간 합 查询
lowbit 함수
바이너리 인덱스 트리의 핵심은 lowbit 연산입니다:
lowbit(x) = x & (-x)
이 연산은 x의 이진 표현에서 가장 오른쪽에 있는 1의 위치 값을 반환합니다.
예를 들어, x = (0010010011000)₂ 라면:
-x = ~x + 1 = (1101101101000)₂
x & (-x) = (0000000001000)₂
동작 원리
배열 a[1...n]이 ...
7월 10일 04:24에 게시됨