ABC294_C题解

qwertim

2023-03-22 21:06:35

Solution

# 题意 给你两个单调递增的数组并且每个元素**互不相同**,把两个数组合并并排序,问原来两个数组中的元素分别位于现数组的哪个位置。 # 思路 因数据范围较小,所以直接暴力:数组合并后排序,再枚举现数组每一个元素,看是在原来第一个数组里出现过还是在第二个数组里出现过。 # 代码 ```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; } ```