본문 바로가기

해삐챠의 알고리즘 공부

6. 최소힙 최대힙

- 중간값 구하기

import java.util.Collections;
import java.util.PriorityQueue;
import java.util.Scanner;

class Solution
{
	public static void main(String args[]) throws Exception
	{
		Scanner sc = new Scanner(System.in);
		
		int T = sc.nextInt();
		for (int i=1; i<=T; i++) {
			int n = sc.nextInt();
			int a = sc.nextInt();
			PriorityQueue<Integer> minHeap = new PriorityQueue(Collections.reverseOrder());
			PriorityQueue<Integer> maxHeap = new PriorityQueue();
			
			PriorityQueue<Integer> temp = new PriorityQueue();
			
			int x = sc.nextInt();
			int y = sc.nextInt();
			
			temp.add(a);
			temp.add(x);
			temp.add(y);
			
			// a를 중앙값 저장용으로 쓰자
			minHeap.add(temp.poll());
			a = temp.poll();
			maxHeap.add(temp.poll());
			
			int ans = a;
			
			for (int j=1; j<n; j++) {
				x = sc.nextInt();
				y = sc.nextInt();
				
				temp.add(a);
				temp.add(x);
				temp.add(y);
				temp.add(minHeap.poll());
				temp.add(maxHeap.poll());
				
				// 중앙값보다 크면 maxHeap
				// 중앙값보다 작으면 minHeap
				minHeap.add(temp.poll());
				minHeap.add(temp.poll());
				a = temp.poll();
				maxHeap.add(temp.poll());
				maxHeap.add(temp.poll());
//				System.out.println(a);

				ans += a;
				ans %= 20171109;
			}
			System.out.println("#" + i + " " + ans);
        }
	}
}

'해삐챠의 알고리즘 공부' 카테고리의 다른 글

(? 그냥 글  (0) 2024.11.17
4. 그래프/tree  (0) 2024.11.09
3. 병사관리  (0) 2024.11.08
2. 연결리스트  (0) 2024.11.03
1. 비트마스킹  (2) 2024.11.03