树状数组优化 DP
树状数组优化 DP
常规的区间和就不讨论了,本文主要讨论树状数组维护前后缀最值。
树状数组可以用于维护前后缀最值。
维护前缀最大值:
struct bitPre{
int t[N+1];
int lowbit(int x){
return x&-x;
}
void set(int x,int k){
while(x<=N+3){
k=max(t[x],k);
t[x]=k;
x+=lowbit(x);
}
}
int query(int x){
int ans=0;
while(x){
ans=max(ans,t[x]);
x-=lowbit(x);
}
return ans;
}
};
后缀最大值:
struct bitSuf{
int t[N+1];
int lowbit(int x){
return x&-x;
}
void set(int x,int k){
while(x){
k=max(t[x],k);
t[x]=k;
x-=lowbit(x);
}
}
int query(int x){
int ans=0;
while(x<=N){
ans=max(ans,t[x]);
x+=lowbit(x);
}
return ans;
}
};