【树状数组维护区间最值】知识点讲解+例题x1

【树状数组维护区间最值】知识点讲解+例题x1_第1张图片

【树状数组维护区间最值】知识点讲解+例题x1_第2张图片

只支持末端插入,不支持单点修改操作!


例题

【树状数组维护区间最值】知识点讲解+例题x1_第3张图片


大致思路

模板题。

模板为什么要用a数组其实不是特别清楚,但是这种适用范围小的提醒确实记住模板即可。


AC代码

#include
#include
using namespace std;
const int maxn=1e6;
int c[maxn];
int a[maxn];
int D;
int cnt=0; //记录数列的元素个数 
int lowbit(int x)
{
	return x&(-x);
}

int getmax(int n) //查询末尾的n个数中的最大值 即l=cnt-n+1,r=cnt 
{
	int r=cnt;
	int l=cnt-n+1;
	int ret=a[r];
	while(l<=r)
	{
		ret=max(ret,a[r]);
		for(--r;r-l>=lowbit(r);r-=lowbit(r))
			ret=max(ret,c[r]);
	}
	return ret;
}

void change(int x) //末尾插入一个t,需要更新最大值 
{
	++cnt;
	c[cnt]=a[cnt]=x;
	for(int i=1;i>M>>D;
	char c;
	int x;
	int temp=0;
	for(int i=0;i

你可能感兴趣的:(蓝桥杯)