单调队列优化

while(l<=r&&i-q[l]>=sz) l++;        
if(l<=r) dc = max(dc, d[cyc[ms(i)]]+s[i]+d[cyc[ms(q[l])]]-s[q[l]]);
while(l<=r&&d[cyc[ms(q[r])]]-s[q[r]]<=d[cyc[ms(i)]]-s[i]) r--;
q[++r] = i;

q里面存的是决策。

决策j < 阶段i 时:

  1. 有,检查左失效
  2. 有,查找更新
  3. 有,弹差的右,入右

然而实际上可能包含i,因此

  1. 有,检查左失效
  2. 有,弹差的右,入右
  3. 有,查找更新

你可能感兴趣的:(单调队列优化)