範例程式碼 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;
}