蒟蒻蒟蒻求助全WA
查看原帖
蒟蒻蒟蒻求助全WA
384064
kevin985楼主2020/11/21 11:57
#include <bits/stdc++.h>
#include <cstring>
#define INF 0x7f7f7f7f
#define eps ie-6
typedef long long ll;
typedef unsigned long long ull;
typedef bool bl;
typedef int it;
typedef long l;
using namespace std;
ll m,n;
ll w;
struct node{
	ll num;
	ll loc;
}a[1000010],p[1000010];
ull b[100010];
/*
11 3
1 3 3 3 5 7 9 11 13 15 15
1 3 6
*/
bool cmp(node x,node y)
{
	return x.num<y.num;
}
inline int read(){
   int s=0,w=1;
   char ch=getchar();
   while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
   while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
   return s*w;
}
void debug()
{
	for(int i=1;i<=w;i++)
	{
		cout<<p[i].num<<" ";
	}
	printf("\n");
}
int main()
{
	m=read(); n=read();
	for(int i=1;i<=m;i++){ a[i].num=read(); a[i].loc=i; }
	for(int i=1;i<=n;i++){ b[i]=read(); }
	sort(b+1,b+n+1);
	for(int i=1;i<=m;i++)
	{
		if(a[i].num!=a[i-1].num)
		{
			p[++w].num=a[i].num;
			p[w].loc=a[i].loc;
		}
	}
//	debug();
	for(int i=1;i<=n;i++)
	{
		int l=1,r=w,mid;
		bool flag=0;
		while(l<=r)
		{	
			mid=(l+r)/2;
//			printf("l=%d r=%d mid=%d,p[mid]=%d \n",l,r,mid,p[mid].num);
			if(p[mid].num==b[i])
			{
				flag=1;
				printf("%d ",p[i].loc);
//				printf("\nfind");
			}
			if(p[mid].num<b[i])
			{
				l=mid+1;
			}else{
				r=mid-1;
			}
		}
		if(!flag) printf("-1 ");
	}
	return 0;
}
2020/11/21 11:57
加载中...