제출 #1244299

#제출 시각아이디문제언어결과실행 시간메모리
1244299vibhasJust Long Neckties (JOI20_ho_t1)Java
0 / 100
61 ms11600 KiB
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
import java.util.TreeMap;

public class ho_t1 {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        Necktie[]necktie_options = new Necktie[n+1];
        StringTokenizer st = new StringTokenizer(br.readLine());
        for(int i = 0; i < n+1; i++){
            necktie_options[i] = new Necktie(Integer.parseInt(st.nextToken()), i);
        }
        Arrays.sort(necktie_options);
        int[]originals = new int[n];
        st = new StringTokenizer(br.readLine());
        for(int i = 0; i < n; i++){
            originals[i] = Integer.parseInt(st.nextToken());
        }
        Arrays.sort(originals);
        // answered for if CEO took the smallest necktie option.
        TreeMap<Integer, Integer> first = new TreeMap<>();
        for(int i = 0; i < n; i++){
            int put = Math.max(0, necktie_options[i+1].length-originals[i]);
            if(first.containsKey(put)){
                first.put(put, first.get(put)+1);
            }else{
                first.put(put, 1);
            }
        }
        int[]ans = new int[n+1];
        ans[necktie_options[0].index] = first.lastKey();
        for(int i = 1; i <= n; i++){
            int last_difference = necktie_options[i].length-originals[i-1];
            if(first.get(last_difference) == 1){
                first.remove(last_difference);
            }else{
                first.put(last_difference, first.get(last_difference)-1);
            }
            int diff_now = necktie_options[i-1].length - originals[i-1];
            if(first.containsKey(diff_now)){
                first.put(diff_now, first.get(diff_now)+1);
            }else{
                first.put(diff_now, 1);
            }
            ans[necktie_options[i].index] = first.lastKey();
        }
        for(int i = 0; i <= n; i++){
            System.out.print(ans[i] + " ");
        }
        br.close();
    }
    static class Necktie implements Comparable<Necktie>{
        int length;
        int index;
        public Necktie(int a, int b){
            this.length = a;
            this.index = b;
        }
        public int compareTo(Necktie other){
            return this.length - other.length;
        }
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...