|  | @@ -6,5 +6,33 @@
 | 
	
		
			
				|  |  |   * }
 | 
	
		
			
				|  |  |   */
 | 
	
		
			
				|  |  |  func findRightInterval(intervals []Interval) []int {
 | 
	
		
			
				|  |  | -	
 | 
	
		
			
				|  |  | +	n := len(intervals)
 | 
	
		
			
				|  |  | +	res, starts := make([]int, n), make([][]int, n)
 | 
	
		
			
				|  |  | +	for i := 0; i < n; i++ {
 | 
	
		
			
				|  |  | +		starts[i] = []int{intervals[i].Start, i}
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	sort.Sort(ints(starts))
 | 
	
		
			
				|  |  | +	for i := 0; i < n; i++ {
 | 
	
		
			
				|  |  | +		beg, end := 0, n-1
 | 
	
		
			
				|  |  | +		for beg <= end {
 | 
	
		
			
				|  |  | +			mid := beg + (end-beg)/2
 | 
	
		
			
				|  |  | +			if starts[mid][0] < intervals[i].End {
 | 
	
		
			
				|  |  | +				beg = mid + 1
 | 
	
		
			
				|  |  | +			} else {
 | 
	
		
			
				|  |  | +				end = mid - 1
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		if beg == n {
 | 
	
		
			
				|  |  | +			res[i] = -1
 | 
	
		
			
				|  |  | +		} else {
 | 
	
		
			
				|  |  | +			res[i] = starts[beg][1]
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	return res
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +type ints [][]int
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +func (is ints) Len() int           { return len(is) }
 | 
	
		
			
				|  |  | +func (is ints) Less(i, j int) bool { return is[i][0] < is[j][0] }
 | 
	
		
			
				|  |  | +func (is ints) Swap(i, j int)      { is[i], is[j] = is[j], is[i] }
 |