树状数组优化 DP

树状数组优化 DP

常规的区间和就不讨论了,本文主要讨论树状数组维护前后缀最值。

Acwing3662 最大上升子序列和

[NOIP 2013 提高组] 花匠

树状数组可以用于维护前后缀最值。

维护前缀最大值:

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;
	}
};
posted @ 2025-07-25 22:48  TH911  阅读(31)  评论(0)    收藏  举报