没划区间,但是逻辑是一样的T两个点
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int h[5000005];
int p[5000005];
bool point[5000005];
int main()
{
int n,m,t,ans=0;
cin>>n>>m>>t;
for(int i=1;i<=n;i++)
scanf("%d",&h[i]);
for(int i=1;i<=m;i++)
scanf("%d",&p[i]);
sort(p+1,p+1+m);
for(int i=1;i<=m;i++)
{
bool flag=0;
int pos=p[i];
if(h[pos]>t)
{
continue;
}
int now=pos;
for(int q=0;h[now]>q;now--,q++)
{
if(h[now]>t)
{
flag=1;
break;
}
if(point[now]==1)
{
flag=1;
break;
}
}
if(flag)
{
continue;
}
now=pos;
for(int q=0;h[now]>q;now++,q++)
{
if(h[now]>t)
{
flag=1;
break;
}
if(point[now]==1)
{
flag=1;
break;
}
}
if(flag)
{
continue;
}
now--;
point[now]=1;
ans++;
}
if(ans)
cout<<ans+1;
else
cout<<ans;
return 0;
}