这是之前的写法,只对了第一个点。
#include<bits/stdc++.h>
using namespace std;
const int N=100010;
int n,q,m;
struct node{
int n,s;
}a[N];
bool cmp(node a,node b){
return a.n<b.n;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i].n,a[i].s=i;
sort(a+1,a+n+1,cmp);
cin>>q;
while(q--){
cin>>m;
int l=1,r=n;
while(l<=r){
int mid=l+r>>1;
if(a[mid].n<m)l=mid+1;
else r=mid-1;
}
if(a[l].n!=m)puts("0");
else cout<<a[l].s<<'\n';
}
return 0;
}
这是之后的写法,只把输出从puts改成了cout就全过了,为啥呢~
#include<bits/stdc++.h>
using namespace std;
const int N=100010;
int n,q,m;
struct node{
int n,s;
}a[N];
bool cmp(node a,node b){
return a.n<b.n;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i].n,a[i].s=i;
sort(a+1,a+n+1,cmp);
cin>>q;
while(q--){
cin>>m;
int l=1,r=n;
while(l<=r){
int mid=l+r>>1;
if(a[mid].n<m)l=mid+1;
else r=mid-1;
}
if(a[l].n!=m)cout<<0<<'\n';
else cout<<a[l].s<<'\n';
}
return 0;
}