a 数组和 dp 数组都需要开到超过 2nmax。
虽然 a 数组无需存储 [n+1,n+r] 范围内的值,但是在更新 dp 时会被访问。
for(int i = l; i <= n + r; i++){
if(!q.empty() && i - q.front().t > r - l) q.pop_front();
while(!q.empty() && dp[q.back().u] <= dp[i-l])
q.pop_back();
q.push_back(node(i-l, i));
dp[i] = dp[q.front().u] + a[i];
if(i > n) ans = max(ans, dp[i]);
}