| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 | 
							- type Solution struct {
 
- 	size  int
 
- 	rects [][]int
 
- 	areas []int
 
- }
 
- func Constructor(rects [][]int) (sol Solution) {
 
- 	sol.size = len(rects)
 
- 	sol.areas = make([]int, sol.size+1)
 
- 	sol.rects = rects
 
- 	for i := 0; i < sol.size; i++ {
 
- 		r := rects[i]
 
- 		w, h := r[2]-r[0]+1, r[3]-r[1]+1
 
- 		sol.areas[i+1] = sol.areas[i] + w*h
 
- 	}
 
- 	return
 
- }
 
- func (this *Solution) Pick() []int {
 
- 	idx := rand.Intn(this.areas[this.size])
 
- 	beg, end := 1, this.size
 
- 	for beg <= end {
 
- 		mid := beg + (end-beg)/2
 
- 		if this.areas[mid] < idx {
 
- 			beg = mid + 1
 
- 		} else {
 
- 			end = mid - 1
 
- 		}
 
- 	}
 
- 	if this.areas[beg] != idx {
 
- 		beg--
 
- 	}
 
- 	pos := idx - this.areas[beg]
 
- 	r := this.rects[beg]
 
- 	w := r[2] - r[0] + 1
 
- 	dx, dy := pos%w, pos/w
 
- 	return []int{r[0] + dx, r[1] + dy}
 
- }
 
- /**
 
-  * Your Solution object will be instantiated and called as such:
 
-  * obj := Constructor(rects);
 
-  * param_1 := obj.Pick();
 
-  */
 
 
  |