classSolution:def__init__(self,rects:List[List[int]]):self.rects=rectsself.s=[0]*len(rects)fori,(x1,y1,x2,y2)inenumerate(rects):self.s[i]=self.s[i-1]+(x2-x1+1)*(y2-y1+1)defpick(self)->List[int]:v=random.randint(1,self.s[-1])idx=bisect_left(self.s,v)x1,y1,x2,y2=self.rects[idx]return[random.randint(x1,x2),random.randint(y1,y2)]# Your Solution object will be instantiated and called as such:# obj = Solution(rects)# param_1 = obj.pick()
classSolution{privateint[]s;privateint[][]rects;privateRandomrandom=newRandom();publicSolution(int[][]rects){intn=rects.length;s=newint[n+1];for(inti=0;i<n;++i){s[i+1]=s[i]+(rects[i][2]-rects[i][0]+1)*(rects[i][3]-rects[i][1]+1);}this.rects=rects;}publicint[]pick(){intn=rects.length;intv=1+random.nextInt(s[n]);intleft=0,right=n;while(left<right){intmid=(left+right)>>1;if(s[mid]>=v){right=mid;}else{left=mid+1;}}int[]rect=rects[left-1];returnnewint[]{rect[0]+random.nextInt(rect[2]-rect[0]+1),rect[1]+random.nextInt(rect[3]-rect[1]+1)};}}/** * Your Solution object will be instantiated and called as such: * Solution obj = new Solution(rects); * int[] param_1 = obj.pick(); */
classSolution{public:vector<int>s;vector<vector<int>>rects;Solution(vector<vector<int>>&rects){intn=rects.size();s.resize(n+1);for(inti=0;i<n;++i)s[i+1]=s[i]+(rects[i][2]-rects[i][0]+1)*(rects[i][3]-rects[i][1]+1);this->rects=rects;srand(time(nullptr));}vector<int>pick(){intn=rects.size();intv=1+rand()%s[n];intidx=lower_bound(s.begin(),s.end(),v)-s.begin();auto&rect=rects[idx-1];intx=rect[0]+rand()%(rect[2]-rect[0]+1);inty=rect[1]+rand()%(rect[3]-rect[1]+1);return{x,y};}};/** * Your Solution object will be instantiated and called as such: * Solution* obj = new Solution(rects); * vector<int> param_1 = obj->pick(); */