线段树的区间修改加查询区间最大值相信大家都熟悉了,但是,如何查询一个历史的最大值呢?
此模板单纯是自己写写的,在oj上没有找到,是bzoj3064的弱化版,那题还有一个区间赋值的操作,更加麻烦。
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int n,m,x,y,v;
int a[N];
char str[10];
struct node{
int sum,max,tagsum,tagmax;}T[N<<2];
inline void pushdown(int k)
{
//由于T[k].max,T[k].sum的不断更新,所以这边要使用T[k].tagmax,T[k].tagsum
T[k<<1].max=max(T[k<<1].max,T[k<<1].sum+T[k].tagmax);
T[k<<1].sum+=T[k].tagsum;
T[k<<1].tagmax=max(T[k<<1].tagmax,T[k<<1].tagsum+T[k].tagmax);
T[k<<1].tagsum+=T[k].tagsum;
T[k<<1|1].max=max(T[k<<1|1].max,T[k<<1|1].</