Problem:
Score : 200 points

Problem Statement

Find the largest square number not exceeding N. Here, a square number is an integer that can be represented as the square of an integer.

Constraints

1 \leq N \leq 10^9

N is an integer.

Input

Input is given from Standard Input in the following format:

N

Output

Print the largest square number not exceeding N.

Sample Input 1

10

Sample Output 1

9

10 is not square, but 9 = 3 × 3 is. Thus, we print 9.

Sample Input 2

81

Sample Output 2

81

Sample Input 3

271828182

Sample Output 3

271821169

Solution in C++14 (GCC 5.4.1) (judge verdict: Accepted)

#include<iostream>
#include<cstdint>
using namespace std;

int main() {
	int N;
	cin >> N;
	int64_t ans = N / 2;
	for (int i = 0, j = N;i < j;ans = i + (j - i) / 2) { // 二分探索アルゴリズム
		if (ans * ans <= N) i = ans + 1; // iは求める値の範囲の下限
		else j = ans - 1; // jは求める値の範囲の上限
	}
	if (ans * ans > N) ans --; // この二分探索アルゴリズムだと最終的に1だけ多いことがあるので
	cout << ans * ans;
	return 0;
}
/*
31536000のコメント解説欄
ここテンプレで用意してるから、A問題とかだとこの先空欄の危険あり

N以下の平方数のうち最大のものの平方根をMとする
この時、1～Mまでは二乗してもN以下であり、M+1～Nまでは二乗するとNより大きい
これを利用すると、二分探索を用いてMを特定することができる
後はM^2を出力すればいい
オーダーはO(logN)であり、高速に振舞う

あ、計算の都合上時々ansは10^9*10^9==10^18<=2^60まで扱うので64bitの整数を使わないとオーバーフローするよ
*/