範例程式碼 uva12428
//uva12428
#include <iostream>
using namespace std;
long long find_max_clique(long long n, long long m, long long l, long long r) {
if (r - l <= 1)
return l;
long long mid = (l + r) / 2;
long long e = mid * (mid - 1) / 2;
if (e <= m && (m - e) >= (n - mid))
return find_max_clique(n, m, mid, r);
else
return find_max_clique(n, m, l, mid);
}
int main() {
long long t, n, m, n_clique, e_clique, ans;
cin >> t;
for (int i = 0; i < t; ++i) {
cin >> n >> m;
n_clique = find_max_clique(n, m, 1, n + 1);
e_clique = n_clique * (n_clique - 1) / 2;
ans = n - n_clique;
if (ans != (m - e_clique))
--ans;
if (n_clique == 2)
++ans;
cout << ans << endl;
}
return 0;
}