时间复杂度
nlogn
C++ 代码
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long LL;
LL n, m, k;
bool check(LL mid){
LL res = 0;
for(int i = 1; i <= n; i ++){
res += min(m, mid/i);//mid/i这个代码的作用是判断第i行有多少个小于等于i的数。
}
return res >= k;
}
int main()
{
scanf("%lld%lld%lld", &n, &m, &k);
LL l = 1, r = n*m;//为什么r设为n*m呢?
while(l < r){
LL mid = l + r >> 1;
if(check(mid)) r = mid;
else l = mid + 1;
}
cout << r << endl;
return 0;
}
//错因:错在第18行,前面已经设置了LL类型,因此scanf输入时要与LL对应才行呢~