常規單調隊列,然而我仍是寫的容易出鍋,單調隊列好難==c++
#include<bits/stdc++.h> using namespace std; int n,m,num[1001000],k,l,r,f[1001000],que[1001000]; int main() { cin>>n; for(int i=1;i<=n;i++)cin>>num[i];cin>>m; while(m--) { cin>>k; que[l=r=1]=1; for(int i=2;i<=n;i++) { while(l<=r&&i-k>que[l])l++; f[i]=f[que[l]]+(num[i]>=num[que[l]]); while((l<=r)&&((f[que[r]]>f[i])||((f[que[r]]==f[i])&&(num[que[r]]<=num[i]))))--r; que[++r]=i; } cout<<f[n]<<endl; } }