蒟蒻不能理解
查看原帖
蒟蒻不能理解
536191
__Shao__楼主2022/8/17 14:03

80分,T了两个点. 为什么捏?

#include<bits/stdc++.h>
using namespace std;
#define rt register int
int n,k,a[1000005],q,dp1[1000005];
int hh,tt,q1[1000005];
int main()
{
	scanf("%d",&n);
	for(rt i=1;i<=n;++i)scanf("%d",&a[i]);
	scanf("%d",&q);
	while(q--)
	{
		scanf("%d",&k);
		for(rt i=1;i<=n;++i)dp1[i]=1000006;
		dp1[1]=0;hh=tt=1;q1[hh]=1;
		for(rt i=2;i<=n;++i){
			while(q1[hh]<i-k&&hh<=tt)hh++;
			for(rt j=hh;j<=tt;++j)
				if(a[i]<a[q1[j]]) dp1[i]=min(dp1[i],dp1[q1[j]]);
				else dp1[i]=min(dp1[i],dp1[q1[j]]+1);
			while(dp1[q1[tt]]>dp1[i]||(a[i]>a[q1[tt]]&&dp1[q1[tt]]==dp1[i])&&hh<=tt)tt--;
			q1[++tt]=i;
		}
		printf("%d\n",dp1[n]);
	}
	return 0;
}
2022/8/17 14:03
加载中...