竞赛
考级
用scanf,printf不会超时 a数组开大点,1≤n,m≤1000000,开1000000+5=1000005就行
枫原万叶
查找用脚都会写用scanf读入和printf输出比cin和cout快这样不会超时,再用lower_bound()这个函数就可以了,简直是易如反掌!!!!直接看代码!!!
郑富活(湉)
#include<bits/stdc++.h> using namespace std; int main (){ int n,m,a[1000005]; cin>>n>>m; for(int i=1;i<=n;i++){ scanf("%d",&a[i]); } for(int i=1;i<=m;i++){ int s; scanf("%d",&s); int l=1,r=n,ans=-1; while(l<=r){ int mid=(l+r)/2; if(a[mid]>=s){ if(a[mid]==s)ans=mid; r=mid-1; }else l=mid+1; } printf("%d ",ans); } return 0; }
?
(以下代码使用函数) 先设置三个变量,分别代表首与尾和猜的值,猜的值/2取整,如果大了,首项变成当前猜的数,如果小了,尾项变成当前猜的数: 完整代码:
夏亚.阿兹纳布尔【ddxdd】
我爱原神
AC
#include<bits/stdc++.h> using namespace std; int main(){ int n,m,a[1000010]; cin>>n>>m; for(int i=1;i<=n;i++)cin>>a[i]; for(int i=1;i<=m;i++){ int q; cin>>q; int x=lower_bound(a+1,a+n+1,q)-a; if(a[x]==q)cout<<x<<" "; else cout<<-1<<" "; } return 0; }
welcome to china
*经典的二分查找题目(板子题) 如果出现思路方面的不理解,建议看 二分查找相关知识点:https://www.acgo.cn/discuss/study/36311 接下来先放伪代码 正经代码: STL版本(参见二分查找相关知识点):
记得重新复习“最近做过的题”
🎈🎈🎈🎈🎈🎈🎈🎈
LS_YZY
#include<bits/stdc++.h> using namespace std; int main(){ int n, m; cin >> n >> m; int a[n+3]; for(int i=1; i<=n; i++)cin >> a[i]; while(m--){ int t; cin >> t; int x = lower_bound(a+1, a+n+1, t)-a; if(a[x]!=t)cout << -1; else cout <<x; cout << " "; } }
人类
复仇者_耈豕
zsy
skirmish
xby
IO不加速+手搓二分
毛奕程
???
提交答案之后,这里将显示提交结果~