Time Limit Exceeded:80分

#include<iostream>
using namespace std;
int main()
{
int n,m;
cin>>n>>m;
int a1[n],a2[m],p[m];
for(int i=0;i<n;i++)
cin>>a1[i];
for(int i=0;i<m;i++)
cin>>a2[i];
for(int i=0;i<m;i++)
{
int x=0;
for(int j=0;j<n;j++)
{
if(a1[j]<=a2[i])
x=a1[j];
else
j=n;
}
if(x==0)
p[i]=-1;
else
p[i]=x;
}
for(int i=0;i<m;i++)
cout<<p[i]<<endl;
}
不要发自己的代码,大家教下我错在哪里或者怎么改
桑烁在2018-10-13 12:01:20追加了内容
本人不会二分,要代码注释
桑烁在2018-10-20 15:05:47追加了内容
大佬们救救我啊
桑烁在2018-11-03 13:56:45追加了内容
1
额,这是二分查找吧......
我之前和你一样,后来交了N次才知道是二分查找,然后AC了
l代表left
r代表right
m代表mid
定义一个函数:
int found(int l, int r, int x) {
int m;
while(l <= r) {
m = (l + r) / 2;
// 因为a数组是一个"单调增的正整数序列",所以a[m]大了往右找,小了往左找
如果a[m]==查找的x,
return a[m];
如果a[m]>查找的x,
r=m-1;
如果a[m]<查找的x,
l=m+1;
}
return a[r];
}
主函数:
在输入时 found(1,n,x);
张元宝在2018-10-21 19:33:57追加了内容
int find(int left, int right, int x) {
int mid;
while(left <= right) {
mid = (left + right) / 2;
if(a[mid] == x)
return a[mid];
else if(a[mid] < x)
left = mid + 1;
else right = mid - 1;
}
return a[right];
}张元宝在2018-10-21 19:39:57追加了内容
a数组为全局变量。
主函数{
定义 n, m, x, i;
while(scanf("%d%d", &n, &m) != EOF) { //EOF是结束符
a[0] = -1;
for(i=1; i<=n; i++)
输入a[i]
for(i=1; i<=m; i++) {
输入
printf("%d\n", find(1, n, x));
}
}
}

