BOJ 2336 - 굉장한 학생 (세그트리, 수학, 기하)
https://www.acmicpc.net/problem/2336 바로 이전에 풀었던 유형과 유사 n명의 학생이 동점자 없는 시험을 세번 치른다. i번 학생의 1,2,3차 시험 등수 < j번 학생의 1,2,3차 시험 등수일 경우 i번 학생은 j번학생보다 대단하다. 본인보다 대단한 학생이 없는 경우 그 학생은 굉장한 학생이라고 할 때, 굉장한 학생의 수를 구하라 (입력에서 1번 인덱스에 오는 숫자 i는 i번 학생이 1등했다는 의미) 각 학생마다 1,2,3차 등수를 tuple ran[MAX]에 저장한다. ex) ran[3] = {x,y,z} : 3번학생이 1차시험 x등 2차시험 y등 3차시험 z등했음. 1차시험의 등수를 기준으로 ran을 정렬한 후에, y와 z만 가지고 비교해 주면 된다. 아래 그림을 구현하..
2020. 4. 22.
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.