传送门:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1287
51nod是抽风了么……贼难连……
裸的二分+线段树之类的维护一下就好
推荐线段树上二分
#include<stdio.h>
#include<algorithm>
#define cint const int &
#define M 65536
int t[M<<1],n,m,aim;
void mov(cint k)
{
if (M<=k){t[aim=k-1]++;return;}
if (aim<=t[k<<1]) return mov(k<<1);
return mov(k<<1|1);
}
int main()
{
scanf("%d%d",&n,&m);
for (int i=0;i<n;i++) scanf("%d",t+M+i);
for (int i=M-1;i;i--) t[i]=std::max(t[i<<1],t[i<<1|1]);
while (m--)
{
scanf("%d",&aim);
if (t[1]<aim || aim<=t[M]) continue;
mov(1);
for (int k=aim>>1;k;k>>=1) t[k]=std::max(t[k<<1],t[k<<1|1]);
}
for (int i=0;i<n;i++) printf("%d\n",t[M+i]);
}