一番近い要素を検索
968 ワード
与えられた値に最も近い要素を検索します.
Inputの最初の行は、非ドロップシーケンス長の整数nを含む.1<=n<=100000第二行はn個の整数を含み、非降順シーケンスの各要素である.すべての要素のサイズは0-1,000,000,000の間にあります.3行目は、問合せする所定の値の個数を含む整数mです.1<=m<=10000次にm行、各行の整数が、要素に最も近い所与の値を問い合わせるために行われます.与えられた値のサイズは全部0-1,000,000,000の間です.Output m行は、各行の整数で、指定された値に最も近い要素値の入力順序を維持します.複数の値が条件を満たす場合は、最小の一つを出力します.Sample Input
Inputの最初の行は、非ドロップシーケンス長の整数nを含む.1<=n<=100000第二行はn個の整数を含み、非降順シーケンスの各要素である.すべての要素のサイズは0-1,000,000,000の間にあります.3行目は、問合せする所定の値の個数を含む整数mです.1<=m<=10000次にm行、各行の整数が、要素に最も近い所与の値を問い合わせるために行われます.与えられた値のサイズは全部0-1,000,000,000の間です.Output m行は、各行の整数で、指定された値に最も近い要素値の入力順序を維持します.複数の値が条件を満たす場合は、最小の一つを出力します.Sample Input
3
2 5 8
2
10
5
Sample Output8
5
acコード参照リンク#include
using namespace std;
const int MAXN = 1e5+6;
int a[MAXN] = {};
int main() {
int n,m;
scanf("%d",&n);
for(int i=0;i=a[n-1]){
printf("%d
",a[n-1]);
}
else{
int l=0,r=n;
while(lt){
r=min;
}else{
l=min+1;
}
}
int ans=l;// t
// int ans=upper_bound(a,a+n,t)-a;
if(a[ans]-t