22pts deque悬关求条
查看原帖
22pts deque悬关求条
858244
wenchenyu楼主2025/8/3 21:29
#include<iostream>
#include<cstdio>
#include<deque>
#include<cstring>
#define int long long
using namespace std;
int n;
const int N=1e6+10;
int a[N];
int qq;
int si;
int dp[N];
deque<int> q;
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin>>n;
	for(int i=1;i<=n;i++) cin>>a[i];
	cin>>qq;
	while(qq--){
		cin>>si;
		q.clear();
		memset(dp,0x3f,sizeof(dp));
		dp[1]=0;
		q.push_back(1);
		for(int i=2;i<=n;i++){
			while(!q.empty()&&q.front()+si<i) q.pop_front();
			if(a[i]<a[q.back()]){
				while(!q.empty()&&a[i]<a[q.back()]){
					dp[i]=min(dp[i],dp[q.back()]);
					q.pop_back();
				}
				if(!q.empty()) dp[i]=min(dp[i],dp[q.front()]+1);
				q.push_back(i);
			}
			else {
				dp[i]=dp[q.front()]+1;
				q.push_back(i);
			}
		}
//		for(int i=1;i<=n;i++)
//		 cout<<dp[i]<<" ";
//		cout<<endl;
		cout<<dp[n]<<endl;
	}
	
	return 0;
}
2025/8/3 21:29
加载中...