ABC294_C题解
qwertim
2023-03-22 21:06:35
# 题意
给你两个单调递增的数组并且每个元素**互不相同**,把两个数组合并并排序,问原来两个数组中的元素分别位于现数组的哪个位置。
# 思路
因数据范围较小,所以直接暴力:数组合并后排序,再枚举现数组每一个元素,看是在原来第一个数组里出现过还是在第二个数组里出现过。
# 代码
```cpp
#include<bits/stdc++.h>
using namespace std;
#define fo(i,l,r) for(int i=l;i<=r;i++)
int n,m,a[100005],b[100005],pos,c[200005];
map<int,bool>ba;//存储a数组里的元素
bool bk[200005];
int main(){
cin>>n>>m;
fo(i,1,n)scanf("%d",&a[i]),c[++pos]=a[i],ba[a[i]]=1;
fo(i,1,m)scanf("%d",&b[i]),c[++pos]=b[i];
sort(c+1,c+1+pos);
fo(i,1,pos)if(ba[c[i]])printf("%d ",i),bk[i]=1;//判断是否为a数组里的元素
cout<<endl;
fo(i,1,pos)if(!bk[i])printf("%d ",i);//判断是否输出过
return 0;
}
```