线段树求区间最大值与最小值的差
来源:互联网 发布:2016年的淘宝怎么操作 编辑:程序博客网 时间:2024/05/18 13:26
http://poj.org/problem?id=3264
#include <cmath>#include<stdio.h>#include<string.h>#include<iostream>using namespace std;#define L(x) (x << 1)#define R(x) (x << 1 | 1)#define INT_MAX 0x7fffffffconst int MAX = 50010;struct Tnode{ int mmax,mmin,val; int l,r;};Tnode node[MAX*3];int v[MAX],big,small;void init(){ memset(node,0,sizeof(node));}void build(int t,int l,int r){ node[t].l=l; node[t].r=r; if(l==r-1) { node[t].mmin=v[l]; node[t].mmax=v[l]; return ; } int mid =(l+r)>>1; build(L(t),l,mid); build(R(t),mid,r); node[t].mmax=max(node[L(t)].mmax,node[R(t)].mmax); node[t].mmin=min(node[L(t)].mmin,node[R(t)].mmin);}void get(int t,int l,int r){ if(node[t].l==l&&node[t].r==r) { big=max(node[t].mmax,big); small=min(node[t].mmin,small); return ; } int mid=(node[t].l+node[t].r)>>1; if(l>=mid) get(R(t),l,r); else if(r<=mid) get(L(t),l,r); else { get(R(t),mid,r); get(L(t),l,mid); }}int main(){ int n,m,x,y; while( ~scanf("%d%d",&n,&m)) { init(); for(int i=1; i<=n; i++) scanf("%d",&v[i]); build(1,1,n+1); while(m--) { scanf("%d%d",&x,&y); small=INT_MAX; big=0; get(1,x,y+1); printf("%d\n",big-small); } }return 0;}
- 线段树求区间最大值与最小值的差
- NYOJ 119 士兵杀敌(三)(线段树—求区间最大值与最小值差)
- POJ 3264 Balanced Lineup(线段树—求区间最大值与最小值差)
- poj3264 Balanced Lineup(求区间的最大值与最小值之差)
- 线段树求区间最大值和最小值(指针)
- POJ3264(线段树求区间最大值和最小值)
- POJ 3264(线段树求区间内最大值和最小值)
- 【HDU3530】【单调队列(双)】Subsequence 【长度为n的数列,求最长子区间的长度,使得区间的最大值与最小值的差满足一个范围】
- 线段树求区间最大值
- 线段树区间求最大值
- 线段树求区间最大值
- poj3264 线段树求最大值,最小值
- poj 3264 Balanced Lineup(查询区间最大值与最小值的差)
- 求输入3个数中最大值与最小值求差的值
- 【线段树】 求区间最小值以及区间最小值
- 卿学姐与公主(线段树区间求最大值)
- poj 2823 线段树 求固定区间的最大最小值
- 求点1 到点n 所有路径中 最大值与最小值之差 最小的那个
- 恐慌
- HTML颜色代码表
- IT技术文章示例(附源码)
- 异常/深入java.lang.Throwable
- PageRank 入门
- 线段树求区间最大值与最小值的差
- Java迷你Mp3播放器
- 【没人告诉你的秘密】关于glMap2使用
- Struts2常用标签总结
- Vbox下CentOS6 两张网卡配置
- OpenCv图像载入显示
- ubuntu 解压 打包 命令全集
- Motorola USB Driver v5.9.0 for Windows
- btrfs文件系统的Makefile分析