본문 바로가기

세그트리8

BOJ 10167 - 금광 (세그트리, 분할정복) https://www.acmicpc.net/problem/10167 현장에서 100%받은 학생이 없었다는 문제 https://www.youtube.com/watch?v=NHf7v-_azYs&list=PLN3yisVKGPfh_sdb_pxGMP3lTF91DOgOr&index=31 위 영상 참고했습니다. www.acmicpc.net/problem/17975 유사문제 좌표평면 위에 최대 3000개의 정점이 주어진다. 각 정점마다 cost가 주어진다. 어떤 직사각형 안에 담을 수 있는 cost합의 최대를 구하라 1. 좌표압축을 해도 문제의 통일성을 해치지 않는다. 좌표값을 10의 9승에서 10의 3승정도로 줄일 수 있다. 2. 직사각형의 좌하단 꼭지점을 (x1,y1), 우상단 꼭지점을 (x2,y2)라고 뒀을 때 .. 2020. 5. 11.
BOJ 2472 - 체인점 (다익스트라, 좌표압축, 세그트리, 수학) https://www.acmicpc.net/problem/2472 이런 문제 3문제를 3시간안에 중학생이 푼다 최대 n개의 정점으로 이뤄진 무방향 가중치 그래프가 주어진다. (n> u >> v >> w; g[u].push_back({ v,w }); g[v].push_back({ u,w }); } memset(d, 0x3f, sizeof(d)); for (int i = 0; i query; while (query--) { int i; cin >> i; cout 2020. 4. 22.
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 14463 - 소가 길을 건너간 이유 9 (세그트리, 라인스위핑) https://www.acmicpc.net/problem/14463 distinct한 좌표를 갖는 교차하는 선분쌍의 '개수' nlogn에 구하기 참고: n^2에 모든 교차하는 선분쌍을 하나하나 들여다 보는 로직 https://suuntree.tistory.com/112 선분i를 처음부터 순차로 보면서, 선분 i의 범위가 [lo,hi]라면, hi를 세그먼트트리에서 1 올리는 update를 해준다. 그러면 0~i-1번 선분과 선분 i가 교차하는 쌍의 개수는 psum[i끝점] - psum[i시작점]이다. 다시말해서, 0~i-1번 선분 중에 선분 i[lo,hi]와 교차하는 선분의 개수는, 끝나는 점이 [lo,hi]에 속하는 선분의 개수이다. (선분i에 포함되는 선분은 i+1이후이므로 신경쓰지 않는다.) cons.. 2020. 2. 29.