66分蒟蒻悬关求调
查看原帖
66分蒟蒻悬关求调
398047
取名真难!楼主2025/7/19 16:05
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<vector>
#include<string>
#include<queue>
#include<cmath>
#include<map>
using namespace std;
int n,q,len,h1,h2,t1,t2,ans,now,to;
int d[1000005];
int s1[1000005],i1[1000005];
int s2[1000005],i2[1000005];
int main(){
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
	cin>>n;
	for(int i=1;i<=n;i++){
		scanf("%d",d+i);
	}
	cin>>q;
	while(q--){
		cin>>len;
		h1=h2=1,t1=t2=0,ans=0,now=1,to=1;
		while(now<n){
			while(h1<=t1&&i1[h1]<=now) h1++;
			while(h2<=t2&&i2[h2]<=now) h2++;
			while(to<now+len&&to<n){
				to++;
				while(h1<=t1&&d[to]>=s1[t1]) t1--;
				s1[++t1]=d[to];
				i1[t1]=to;
				if(d[to]<d[now]){
					while(h2<=t2&&d[to]>=s2[t2]) t2--;
					s2[++t2]=d[to];
					i2[t2]=to;
				}
			}
			if(h2<=t2){
				now=i2[h2];
			}else{
				if(to==n) now=n;
				else now=i1[h1];
				ans++;
			}
		}
		cout<<ans<<endl;
	}
//	fclose(stdin);
//	fclose(stdout);
	return 0;
}
/*

*/
2025/7/19 16:05
加载中...