結果

問題 No.3325 陰陽師
コンテスト
ユーザー msksknkn
提出日時 2025-11-01 16:56:02
言語 Java
(openjdk 23)
結果
WA  
実行時間 -
コード長 1,657 bytes
コンパイル時間 3,031 ms
コンパイル使用メモリ 89,200 KB
実行使用メモリ 85,096 KB
最終ジャッジ日時 2025-11-01 16:56:53
合計ジャッジ時間 34,330 ms
ジャッジサーバーID
(参考情報)
judge1 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 5 WA * 18 TLE * 7
権限があれば一括ダウンロードができます

ソースコード

diff #

package q7;
import java.util.*;
public class Main {

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		Scanner sc = new Scanner(System.in);
		TreeMap<Integer,Integer> map = new TreeMap<>();
		int n = sc.nextInt();
		int m = sc.nextInt();
		int INF = Integer.MAX_VALUE/2;
		map.put(INF,-1);
		int[] a = new int[n];
		int[] t = new int[m];
		for(int i = 0;i < n;i++) {
			a[i] = Integer.parseInt(sc.next());
			if(!map.containsKey(a[i])) {
				map.put(a[i], 0);
			}map.put(a[i], map.get(a[i]) + 1);
		}int max = 0;
		for(int i = 0;i < m;i++) {
			t[i] = Integer.parseInt(sc.next());
		}
		//貪欲にやるのが最大にできそう
		for(int i = 0;i < m;i++) {
			int c = map.ceilingKey(t[i]);
			if(c == INF)break;
			max = i + 1;
			map.put(c,map.get(c) - 1);
			if(map.get(c) == 0)map.remove(c);
		}ArrayList<Integer> l = new ArrayList<>();
		for(int i = 0;i < max;i++) {
			l.add(t[i]);
		}Collections.sort(l,Collections.reverseOrder());
		Arrays.sort(a);
		int left = -1;
		int right = 1000000001;
		while(left < right - 1) {
			int mid = (left + right)/2;
			int used = n;
			boolean ok = true;
			for(int i = 0;i < max;i++) {
				int ind = binSearch(used,a,l.get(i) + mid);
				if(ind == -1 || a[ind] < l.get(i)) {
					ok = false;
					break;
				}
			}if(ok) {
				right = mid;
			}else {
				left = mid;
			}
		}		
		System.out.print(right);
	}public static int binSearch(int used,int[] a,int target) {
		int left = -1;
		int right = used;
		while(left < right - 1) {
			int mid = (left + right)/2;
			if(a[mid] <= target) {
				left = mid;
			}else {
				right = mid;
			}
		}return left;
	}

}
0