Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
113 changes: 113 additions & 0 deletions LTIME64B/CHEFRS
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@

import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

class CustomComparator implements Comparator<Integer>
{
Map<Integer, Integer> map;
public CustomComparator(Map<Integer, Integer> map)
{
this.map = map;
}

public int compare(Integer x, Integer y)
{
if (map.containsKey(x) && map.containsKey(y))
return map.get(x) - map.get(y);
else if (map.containsKey(y))
return 1;
else if (map.containsKey(x))
return -1;
else
return x - y;
}
}


class ltsept18 {

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int t=sc.nextInt();
int iterate=0;
while(iterate++<t) {
int n=sc.nextInt();
int m=sc.nextInt();
Integer arr1[]=new Integer[n];
Integer arr2[]=new Integer[n];

for(int i=0;i<n;i++) {
arr1[i]=sc.nextInt();
arr2[i]=sc.nextInt();
}
int compute[]=new int[m];
for(int i=0;i<m;i++) {
compute[i]=sc.nextInt();
}

Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for(int i = 0; i < arr1.length; i++)
map.put(arr1[i], i);

// Arrays.sort method doesn't work with primitive array
// when used with user defined comparator
Arrays.sort(arr2, new CustomComparator(map));

// for(Integer i : arr2)
// System.out.print(i + " ");
Arrays.sort(arr1);
for(int i=0;i<compute.length;i++) {
int start=0;
int end=arr1.length-1;
int index=0;
while(start<=end) {
int mid=start+(end-start)/2;
// System.out.println(mid);
if(arr1[mid]==compute[i])
{
index=mid;
break;
}else if(arr1[mid]<compute[i]) {
index=mid;
start=mid+1;
}else {
index=mid;
end=mid-1;
}
}
// System.out.println(index+" index hai ye ");
int ans=Integer.MAX_VALUE;
if(compute[i]>=arr1[index] && compute[i]<arr2[index]) {
ans=0;
}
if((index-1)>=0 && compute[i]>=arr1[index-1] && compute[i]<arr2[index-1]) {
ans=0;
}
if((index+1)<arr1.length && compute[i]>=arr1[index+1] && compute[i]<arr2[index+1]) {
ans=0;
}
if(compute[i]<arr1[index]) {
ans=Math.min(ans, arr1[index]-compute[i]);
}
if((index-1)>=0 && compute[i]<arr1[index-1]) {
ans=Math.min(ans, arr1[index-1]-compute[i]);
}
if((index+1)<arr1.length &&compute[i]<arr1[index+1]) {
ans=Math.min(ans, arr1[index+1]-compute[i]);
}

if(compute[i]>=arr2[arr2.length-1]) {
System.out.println(-1);
}else {
System.out.println(ans);
}
}

}

}

}