제출 #631275

#제출 시각아이디문제언어결과실행 시간메모리
631275kyaruru학교 설립 (IZhO13_school)Java
30 / 100
2070 ms32664 KiB
import java.io.*;
import java.util.*;

public class school {
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        PriorityQueue<int[]> m=new PriorityQueue<>((o1, o2) -> (o1[0]-o1[1])-(o2[0]-o2[1]));
        PriorityQueue<int[]> s=new PriorityQueue<>((o1, o2) -> o1[1]-o2[1]);
        PriorityQueue<int[]> save=new PriorityQueue<>((o1, o2) -> o2[0]-o1[0]);
        String[] sa=bf.readLine().split(" ");
        int a=Integer.parseInt(sa[0]),p=Integer.parseInt(sa[1]),q=Integer.parseInt(sa[2]);
        int[][] k=new int[a][2];
        for(int i=0; i<a; i++){
            sa=bf.readLine().split(" ");
            int x=Integer.parseInt(sa[0]),y=Integer.parseInt(sa[1]);
            k[i][0]=x; k[i][1]=y;
        }
        Arrays.sort(k,(o1, o2) -> o2[0]-o1[0]);
        for(int i=0; i<a; i++){
            if(p==0){
                if(s.size()<q) s.add(k[i]);
                else{
                    if(!s.isEmpty() && s.peek()[1]<k[i][1]){
                        s.poll();
                        s.add(k[i]);
                    }
                }
            }
            else {
                if (m.size() < p) m.add(k[i]);
                else{
                    if(s.size()<q){
                        int[] r=m.poll();
                        if(r[0]-r[1]>=k[i][0]-k[i][1]) {
                            s.add(k[i]);
                            m.add(r);
                        }
                        else {
                            s.add(r);
                            m.add(k[i]);
                        }
                    }
                    else{
                        if(!s.isEmpty() && s.peek()[1]<k[i][1]){
                            save.add(s.poll());
                            s.add(k[i]);
                        }
                    }
                }
            }
        }
        long sum=0;
        while(!m.isEmpty()) save.add(m.poll());
        while(p-->0) sum+=save.poll()[0];
        while(!s.isEmpty()) sum+=s.poll()[1];
        System.out.println(sum);
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...