就是维护一下每个值现在取到几。复杂度调和级数求和nlogn
#include <bits/stdc++.h>
using namespace std;
#define N 1100000
#define ll long long
int n,m,mx,top;
int a[N],pos[N];
ll now,bel[N],st[N];
int main()
{
//freopen("tt.in","r",stdin);
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]),mx=max(mx,a[i]);
scanf("%d",&m);
for(int x;m--;)
{
scanf("%d",&x);
for(int i=pos[x]+x,cnt=0;cnt<x&&i<=mx;i+=x)
if(!bel[pos[x]=i])
{
bel[i]=now+cnt+1;
cnt++;
}
now+=x;
}
for(int i=1;i<=n;i++)
if(bel[a[i]])
st[++top]=bel[a[i]];
printf("%d\n",top);
sort(st+1,st+1+top);
for(int i=1;i<=top;i++)
printf("%lld\n",st[i]);
return 0;
}