1 条题解

  • 0
    @ 2025-12-17 18:05:47
    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e6+10;
    int dp[N],n,k,a[N];
    struct node{int v,id,h;};
    void solve()
    {
    	cin>>k;memset(dp,0,sizeof(dp));
    	deque<node>q;
    	q.push_back({0,1,a[1]});
    	for(int i=2;i<=n;i++)
    	{
    		while(!q.empty()&&i-q.front().id>k)q.pop_front();
    		dp[i]=q.front().v+(q.front().h<=a[i]);
    		while(!q.empty()&&q.back().v+(q.back().h<a[i])>dp[i])q.pop_back();
    		q.push_back({dp[i],i,a[i]});
    	}
    	cout<<dp[n]<<'\n';
    }
    int main()
    {
    	cin>>n;
    	for(int i=1;i<=n;i++)cin>>a[i];
    	int q;cin>>q;
    	while(q--)solve();
    	return 0;
    }
    
    • 1

    信息

    ID
    5496
    时间
    10000ms
    内存
    128MiB
    难度
    9
    标签
    递交数
    9
    已通过
    4
    上传者