求助 到底哪错了 只有20分!
查看原帖
求助 到底哪错了 只有20分!
597144
difeny楼主2022/8/14 10:09
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll N=2000055;
ll n,h[N],f[N],head=1,tail,q[N],m,k;
int main()
{
	scanf("%lld",&n);
	for(ll i=1;i<=n;i++)scanf("%lld",&h[i]);
	scanf("%lld",&m);
	while(m--)	
{	
    memset(f,0,sizeof(f));
    memset(q,0,sizeof(q));
    scanf("%lld",&k);
    q[1]=head=tail=1;
	for(ll i=2;i<=n;i++)
	{
		if(h[i]>=h[q[head]])f[i]=f[q[head]]+1;
		else f[i]=f[q[head]];
		while(head<=tail&&f[q[tail]]>f[i]||(f[q[tail]==f[i]]&&h[q[tail]<h[i]]))tail--;
		q[++tail]=i;
		while(head<=tail&&i-q[head]>=k)head++;
	}
    printf("%lld\n",f[n]);
}
}
2022/8/14 10:09
加载中...