#include <bits/stdc++.h>
using namespace std;
struct data
{
int x,index;
}a[50050],q[50050];
bool cmp(data d1,data d2)
{
if(d1.x!=d2.x)
return d1.x<d2.x;
return d1.index<d2.index;
}
int ans[50050],flood[50050];
int main()
{
int n,m,now,cnt,i;
while(cin>>n>>m)
{
for(i=0;i<n;i++)
{
scanf("%d",&a[i].x);
a[i].index=i;
}
for(i=0;i<m;i++)
{
scanf("%d",&q[i].x);
q[i].index=i;
}
sort(a,a+n,cmp);
sort(q,q+m,cmp);
memset(flood,0,sizeof(flood));
now=1;
cnt=0;
for(i=0;i<m;i++)
{
for(;cnt<n&&a[cnt].x<=q[i].x;cnt++)
{
if(a[cnt].index==0)
{
if(flood[1])
now--;
}
else if(a[cnt].index==n-1)
{
if(flood[n-2])
now--;
}
else
{
if(flood[a[cnt].index-1]&&flood[a[cnt].index+1])
now--;
if(!flood[a[cnt].index-1]&&!flood[a[cnt].index+1])
now++;
}
flood[a[cnt].index]++;
}
ans[q[i].index]=now;
}
for(i=0;i<m;i++)
printf("%d\n",ans[i]);
}
}
51nod 1276 岛屿的数量
最新推荐文章于 2019-08-04 15:01:15 发布