[POJ3264]Balanced Lineup(线段树,区间最值差)
2016-05-15 16:01
453 查看
题目链接:http://poj.org/problem?id=3264
写了一个更优美一点的
写了一个更优美一点的
#include <algorithm> #include <iostream> #include <iomanip> #include <cstring> #include <climits> #include <complex> #include <fstream> #include <cassert> #include <cstdio> #include <bitset> #include <vector> #include <deque> #include <queue> #include <stack> #include <ctime> #include <set> #include <map> #include <cmath> using namespace std; #define fr first #define sc second #define pb(a) push_back(a) #define Rint(a) scanf("%d", &a) #define Rll(a) scanf("%I64d", &a) #define Rs(a) scanf("%s", a) #define FRead() freopen("in", "r", stdin) #define FWrite() freopen("out", "w", stdout) #define Rep(i, len) for(int i = 0; i < (len); i++) #define For(i, a, len) for(int i = (a); i < (len); i++) #define Cls(a) memset((a), 0, sizeof(a)) #define Full(a) memset((a), 0x7f7f, sizeof(a)) typedef struct Node { int lo, hi; Node() {} Node(int l, int h) : lo(l), hi(h) {} }Node; #define lrt rt << 1 #define rrt rt << 1 | 1 const int maxn = 500010; Node h[maxn<<1]; int n, q; void pushUP(int rt) { h[rt].lo = min(h[lrt].lo, h[rrt].lo); h[rt].hi = max(h[lrt].hi, h[rrt].hi); } void build(int l, int r, int rt) { if(l == r) { Rint(h[rt].lo); h[rt].hi = h[rt].lo; return; } int m = (l + r) >> 1; build(l, m, lrt); build(m+1, r, rrt); pushUP(rt); } Node query(int L, int R, int l, int r, int rt) { if(L <= l && r <= R) return h[rt]; int m = (l + r) >> 1; Node ret(0x7f7f7f, 0), tmp; if(m >= L) { tmp = query(L, R, l, m, lrt); ret.lo = min(ret.lo, tmp.lo); ret.hi = max(ret.hi, tmp.hi); } if(m < R) { tmp = query(L, R, m+1, r, rrt); ret.lo = min(ret.lo, tmp.lo); ret.hi = max(ret.hi, tmp.hi); } return ret; } int main() { // FRead(); int a, b; while(~Rint(n) && ~Rint(q)) { build(1, n, 1); while(q--) { Rint(a); Rint(b); Node ret = query(a, b, 1, n, 1); printf("%d\n", ret.hi - ret.lo); } } return 0; }
相关文章推荐
- spark filter过滤rdd元素
- Android 高手进阶之自定义View,自定义属性(带进度的圆形进度条)
- 程序员的基本学习素质
- EventBus3.0源码分析
- 第十一周进度条
- Linux 操作系统基础知识总结
- Android 屏幕旋转 处理 AsyncTask 和 ProgressDialog 的最佳方案
- Maven多模块实战
- 商业研究(18):以小见大,看互联网经济(4个股权众筹平台,10个项目)
- 商业研究(18):以小见大,看互联网经济(4个股权众筹平台,10个项目)
- 1005 ProblemE
- 商业研究(18):以小见大,看互联网经济(4个股权众筹平台,10个项目)
- Python XML操作
- 啊哈!算法--第01节--桶排序
- Jenkins+maven+tomact
- 常用排序算法总结(Java)
- 使用Maven构建多模块项目
- Android开发 Bmob第三方云实现登陆注册
- [Linux]基础知识1
- char* char[]及string的区别及相互转换