传送门
题意简述:有一个初始为空的双端队列,每次可以在队首和队尾插入或弹出一个二元组 ( w i , v i ) (w_i,v_i) (wi,vi),支持询问从当前队列中选取若干个元素是的他们的和对 M O D MOD MOD 取模后余数在 [ l , r ] [l,r] [l,r]中,使得这些装备的战斗力之和最大。
思路:直接看询问貌似可以用 01 01 01背包。
然后由于这个双端队列只能在队首和队尾弹入弹出,那么考虑按时间线段树分治,这样每个元素都相当于一次占据 l o g log log个区间的修改操作。
于是我们先把所有修改操作下放,然后按照线段树的顺序来进行 01 01 01背包即可。
注:在博主经过尝试无法ac之后通过翻阅其他A题神犇的代码之后发现他们在最开始多输入了一个数,貌似加了这个无关紧要的read才能过(雾
代码:
#include<bits/stdc++.h>
#define fi first
#define se second
#define lc (p<<1)
#define rc (p<<1|1)
#define mid (l+r>>1)
#define ri register int
using namespace std;
inline int read(){
int ans=0;
char ch=getchar()