class Solution {
public:
//找到<=k的元素的个数
int search(vector<int>& vec, int k){
int l = 0, r = vec.size();
while(l<r){
int m = l + (r - l)/2;
if(vec[m]>k)
r=m;
else
l=m+1;
}
return l;
}
int kthSmallest(vector<vector<int>>& matrix, int k) {
int lv = matrix[0][0], rv = matrix.back().back();
while(lv<rv){
int mv = lv + (rv - lv)/2;
int cnt = 0;
for(int i=0;i<matrix.size();++i)
cnt+=search(matrix[i],mv);
//cnt是小于等于mv的元素总个数
if(cnt>=k)
rv = mv;
else
lv = mv+1;
}
return lv;
}
};