线段树算法一些题
2021/4/17 12:28:18
本文主要是介绍线段树算法一些题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
POJ3264
/* 算法过程: 1.构建线段树 2.在线段树中插入数据 3.对线段树进行更新(该题无更新操作)和查询 */ #include <cstdio> #include <algorithm> using namespace std; const int INF = 0xffffff0; struct node{ int l; //区间左端点 int r; //区间右端点 //下面是特殊设定的数据域 int minx, maxx; //区间中最高和最矮的奶牛身高 }tree[800010]; int minx = INF; int maxx = -INF; // 对区间l,r建立线段树 void build_tree(int i, int l, int r) { //节点i的数据域的初始化(即根节点) tree[i].l = l; tree[i].r = r; tree[i].minx = INF; tree[i].maxx = -INF; if(l != r) { int mid = (l + r) / 2; build_tree(2 * i + 1, l, mid); build_tree(2 * i + 2, mid + 1, r); } } void Insert(int root, int i, int h) { if(tree[root].l == tree[root].r) { tree[root].maxx = tree[root].minx = h; return; } tree[root].minx = min(tree[root].minx, h); tree[root].maxx = max(tree[root].maxx, h); if(i <= (tree[root].l + tree[root].r) / 2) { Insert(2 * root + 1, i, h); } else { Insert(2 * root + 2, i, h); } } void query(int root, int a1, int a2) { if(tree[root].minx >= minx && tree[root].maxx <= maxx) { return; } if(tree[root].l == a1 && tree[root].r == a2) { minx = min(minx, tree[root].minx); maxx = max(maxx, tree[root].maxx); return; } int mid = (tree[root].l + tree[root].r) / 2; if(a2 <= mid) { query(2 * root + 1, a1, a2); } else if(a1 > mid) { query(2 * root + 2, a1, a2); } else { query(2 * root + 1, a1, mid); query(2 * root + 2, mid + 1, a2); } } int main () { int N, Q; scanf("%d%d", &N, &Q); build_tree(0, 1, N); for(int i = 1; i <= N; ++i) { int h; scanf("%d", &h); Insert(0, i, h); } while(Q--) { int a1, a2; scanf("%d%d", &a1, &a2); minx = INF; maxx = -INF; query(0, a1, a2); printf("%d\n", maxx - minx); } return 0; }
这篇关于线段树算法一些题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-24Java中定时任务实现方式及源码剖析
- 2024-11-24Java中定时任务实现方式及源码剖析
- 2024-11-24鸿蒙原生开发手记:03-元服务开发全流程(开发元服务,只需要看这一篇文章)
- 2024-11-24细说敏捷:敏捷四会之每日站会
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解