线段树最大与最小值模板

模板:

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 5e5 + 5;
int t;
int n,m;
int x, y, k;
int a[N];

//线段树最大与最小值的模板
struct tree{
	int l, r;
	int sum, lmax, rmax, mx;
	int msum, lmin, rmin, mi;
}tr[N * 4];
void pushup(tree &u, tree l, tree r){
	u.sum = l.sum + r.sum;
	u.lmax = max(l.lmax, l.sum+r.lmax);
	u.rmax = max(l.rmax+r.sum, r.rmax);
	u.mx = max(max(l.mx, r.mx), l.rmax+r.lmax);
	
	
	u.msum = l.msum + r.msum;
	u.lmin = min(l.lmin, l.msum+r.lmin);
	u.rmin = min(l.rmin+r.msum, r.rmin);
	u.mi = min(min(l.mi, r.mi), l.rmin+r.lmin);
}

void build(int u, int l, int r){
	tr[u] = {l, r, a[l], a[l], a[l],
		a[l], a[l], a[l], a[l], a[l]};
	if (l == r)return ;
	int mid = (l + r)/2;
	build(u*2, l, mid);
	build(u<<1|1, mid + 1, r);
	pushup(tr[u], tr[u*2], tr[u<<1|1]);
}

tree Query(int u, int l, int r){
	if (l <= tr[u].l && r >= tr[u].r) {
		return tr[u];
	}
	int mid = (tr[u].l + tr[u].r)/2;
	if (y <= mid)return Query(u << 1, x, y);
	if (x > mid)return Query(u << 1|1, x, y);
	tree T;
	pushup(T, Query(u << 1, x, y), Query(u << 1| 1, x, y));
	return T;
}

void solve(){
	cin >> n ;
	for (int i = 1; i <= n; i++) {
		cin >> a[i];
	}
	build(1, 1, n);
	cin >> m;
	for (int i = 1; i <= m; i++) {
		cin >> x >> y;
		tree tr;
		tr=Query(1,x,y);
		cout << max(abs(tr.mx), abs(tr.mi)) << '\n';
	}
}

signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	
	t = 1;
	while(t--){
		solve();		
	}
	return 0;
}

相关推荐

  1. 线段模板

    2024-07-15 04:44:04       19 阅读
  2. 滑动窗口区间模板

    2024-07-15 04:44:04       23 阅读
  3. 9.极大值[省模拟

    2024-07-15 04:44:04       33 阅读
  4. C 练习实例67-数组交换

    2024-07-15 04:44:04       43 阅读
  5. C语言——指针练习:输出

    2024-07-15 04:44:04       36 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-15 04:44:04       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-15 04:44:04       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-15 04:44:04       57 阅读
  4. Python语言-面向对象

    2024-07-15 04:44:04       68 阅读

热门阅读

  1. 使用Arthas定位开发常见问题

    2024-07-15 04:44:04       19 阅读
  2. UOS查看系统信息命令行

    2024-07-15 04:44:04       19 阅读
  3. 【学习笔记】Redis学习笔记——第11章 AOF持久化

    2024-07-15 04:44:04       22 阅读
  4. LeetCode 219. 存在重复元素 II

    2024-07-15 04:44:04       23 阅读
  5. 实验05 单元测试

    2024-07-15 04:44:04       22 阅读
  6. Hash表以及put方法源码的分析

    2024-07-15 04:44:04       21 阅读
  7. 対日開発(錬体境から金丹境まで)

    2024-07-15 04:44:04       16 阅读