BS2 - Tìm kiếm nhị phân 2: Lớn hơn x
Point: 100.0
Time limit: 1.0s
Memory limit: 640 M
Input: stdin
Output: stdout
Author:  
Problem type
Ngôn ngữ cho phép
C, C#, C++, Java, Pascal, Python, Text

Cho dãy số \(u_n = n^2 + 1\) và giá trị \(x\). Hãy tìm phần tử của dãy số nhỏ nhất thỏa mãn lớn hơn hoặc bằng \(x\)

Để chặt nhị phân phần tử nhỏ nhất lớn hơn \(x\) ta sử dụng hàm sau:

ll  chat1(ll x)
{
    ll dau = 1, cuoi = n;
    while(dau<=cuoi)
    {
        ll giua = (dau + cuoi)/2;
        if(a[giua]>=x) 
        {
            kq = a[giua];
            cuoi = giua - 1;
        }
        else
            dau = giua + 1;
    }
    return kq;
}

Input Specification

  • Dòng đầu ghi số nguyên dương \(n\) (\(0 < n \le 10^6\)).
  • Dòng 2 ghi số nguyên dương \(t\) (\(0 < t \le 10^5\))
  • t dòng sau mỗi dòng ghi số nguyên dương \(x\) (\(0< x \le 10^{12}\)).

Output Specification

  • In ra t dòng, dòng thứ \(i\) ghi số kết quả tương ứng là phần tử nhỏ nhất của dãy số lớn hơn hoặc bằng \(x\) tương ứng.

Sample Input

10
5
1
5
10
20
50

Sample Output

2
5
10
26
50

Giải thích: Dãy đã cho được liệt kê ra như sau: \(2, 5, 10, 17, 26, 37, 50, 65, 82, 101\). Với 5 test \(x = 1, 5, 10, 20, 50\) thì ta có các phần tử thỏa mãn tương ứng là: \(u_1 = 2, u_2 = 5, u_3 = 10, u_5 = 26, u_7 = 50\) là các số nhỏ nhất thuộc dãy thỏa mãn lớn hơn hoặc bằng \(x\)