用三个指针i,j,k从三个数组的起点开始遍历,当A[i]==B[j]&&B[j]==C[k],则该元素为其交集元素,输出该元素后三个指针全部前进一格。若有不相等的情况,则让三者中最小的那个,指针前进一格。当其中某个指针到达了数组的终点,停止遍历
/*
首先,数组是有序的,这点就非常利于解题 。
根据多项式加法那题,利用归并的思想,可以知道从多路中挑选出答案,
就是利用归并的思想。
*/
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int n,m,q;
int A[N],B[N],C[N];
int main()
{
cin>>n>>m>>q;
//连续读入三个数组
for(int i=1;i<=n;i++)
{
cin>>A[i];
}
for(int i=1;i<=m;i++)
{
cin>>B[i];
}
for(int i=1;i<=q;i++)
{
cin>>C[i];
}
int i=1,j=1,k=1;
while(i<=n&&j<=m&&k<=q)
{
if(A[i]==B[j]&&B[j]==C[k])
{
cout<<A[i]<<" ";
i++;
j++;
k++;
}
else
{
int minv;
minv=min(A[i],min(B[j],C[k]));
if(A[i]==minv) i++;
if(B[j]==minv) j++;
if(C[k]==minv) k++;
}
}
cout<<endl;
return 0;
}