본문 바로가기

오프라인 쿼리2

BOJ 18263 - Milk visits(오프라인 쿼리, lca) https://www.acmicpc.net/problem/18263 솔루션 참고. 오프라인 쿼리 중 처음 보는 접근. 온라인 쿼리로 풀 수는 있다고 하지만 떠오르지 않는다 트리가 주어지고, 각 정점마다 type이 주어진다. (정점, type 모두 최대 1e5) 최대 1e5개의 쿼리가 들어온다. u, v, t : u~v 경로상에 type t가 존재하는가? 트리의 루트부터 차례로 순회하면서, 현재 정점이 u일때, u가 끝점인 쿼리들을 처리해 줄 것. dat[i][0], dat[i][1] : i번째 쿼리의 첫번째 끝점, 두번째 끝점 vector todo[u] : u가 끝점인 쿼리들의 인덱스. w = lca(u,v)라고 할 때, 다음 그림의 색칠한 부분에 쿼리에서 물어본 타입이 있는지 처리해주면 된다. dfs를.. 2020. 4. 1.
BOJ 15745 - Snow boots (오프라인 쿼리, 유니온 파인드) https://www.acmicpc.net/problem/15745 최대 1e5개의 음이 아닌 정수 n개가 주어진다. 첫번째와 마지막은 0임이 보장된다. 쿼리 s d가 최대 1e5개 주어진다. 배열에서 s를 초과하는 연속하는 부분수열의 최대 길이 < d인 경우 1을, 그 외엔 0을 출력한다. s에 대해 내림차순으로 query를 정렬한다. 각 쿼리마다 배열에서 서로 인접하면서 s를 초과하는 값을 갖는 인덱스끼리 merge해준다. (한 번 처리한 값을 중복해서 처리하지 않도록 한다) 그러면 각 쿼리마다 집합들 중 최대 크기가 s를 초과하는 연속하는 부분 수열의 길이가 된다. 쿼리마다 O(lgN)에 최대값을 찾고 모든 쿼리에 걸쳐 인덱스에 대해 한번씩만 연산하므로 O(QlgN+N)쯤 될 것 같다. int n,.. 2020. 3. 1.