博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 3264 Balanced Lineup 线段树 维护区间最大值和最小值 建树
阅读量:4112 次
发布时间:2019-05-25

本文共 2381 字,大约阅读时间需要 7 分钟。

题意:给你n个数字,求下标区间[l,r]的最大值与最小值之差;
#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std; #define MM(a) memset(a,0,sizeof(a)) typedef long long ll; typedef unsigned long long ULL; const int mod = 1000000007; const double eps = 1e-10; const int inf = 0x3f3f3f3f; const int maxnum=50000; int h[maxnum+5],l[200000+5],r[200000+5]; struct Node{ int minn; int maxn; }node[4*maxnum+5]; int min(int a,int b) { return a
b?a:b; } void add(int a,int b,int v,int k,int l,int r) { if(l>=a&&r<=b) { node[k].minn=v; node[k].maxn=v; } else if(r>a&&l
>1); add(a,b,v,2*k+2,(l+r)>>1,r); node[k].maxn=max(node[2*k+1].maxn,node[2*k+2].maxn); node[k].minn=min(node[2*k+1].minn,node[2*k+2].minn); } }//挑战的风格,将建树与区间更新合为一个函数 int hmax(int a,int b,int k,int l,int r) { if(a<=l&&r<=b) return node[k].maxn; else if(r>a&&l
>1); int tempr=hmax(a,b,2*k+2,(l+r)>>1,r); return templ>tempr?templ:tempr; } else return 0; }//区间查询 int hmin(int a,int b,int k,int l,int r) { if(a<=l&&r<=b) return node[k].minn; else if(r>a&&l
>1); int tempr=hmin(a,b,2*k+2,(l+r)>>1,r); return templ
下面一份代码就是正常的先建树,建树是o(n),上面一份代码是o(nlogn)
#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std; #define MM(a) memset(a,0,sizeof(a)) typedef long long ll; typedef unsigned long long ULL; const int mod = 1000000007; const double eps = 1e-10; const int inf = 0x3f3f3f3f; const int maxnum=50000; int h[maxnum+5],l[200000+5],r[200000+5]; struct Node{ int minn; int maxn; }node[4*maxnum+5]; int min(int a,int b) { return a
b?a:b; } void build(int k,int l,int r) { if(r-l==1) { scanf("%d",&node[k].maxn); node[k].minn=node[k].maxn; return; } build(2*k+1,l,(l+r)>>1); build(2*k+2,(l+r)>>1,r); node[k].maxn=max(node[2*k+1].maxn,node[2*k+2].maxn); node[k].minn=min(node[2*k+1].minn,node[2*k+2].minn); } int hmax(int a,int b,int k,int l,int r) { if(a<=l&&r<=b) return node[k].maxn; else if(r>a&&l
>1); int tempr=hmax(a,b,2*k+2,(l+r)>>1,r); return templ>tempr?templ:tempr; } else return 0; } int hmin(int a,int b,int k,int l,int r) { if(a<=l&&r<=b) return node[k].minn; else if(r>a&&l
>1); int tempr=hmin(a,b,2*k+2,(l+r)>>1,r); return templ

转载地址:http://lvgsi.baihongyu.com/

你可能感兴趣的文章
Struts2技术内幕图书 转载
查看>>
Java异常分类
查看>>
项目中的jackson与json-lib使用比较
查看>>
Jackson Tree Model Example
查看>>
j2ee-验证码
查看>>
日志框架logj的使用
查看>>
js-高德地图规划路线
查看>>
常用js收集
查看>>
mydata97的日期控件
查看>>
如何防止sql注入
查看>>
maven多工程构建与打包
查看>>
springmvc传值
查看>>
Java 集合学习一 HashSet
查看>>
在Eclipse中查看Android源码
查看>>
Android-Socket登录实例
查看>>
Android使用webservice客户端实例
查看>>
层在页面中的定位
查看>>
[转]C语言printf
查看>>
C 语言 学习---获取文本框内容及字符串拼接
查看>>
C 语言学习 --设置文本框内容及进制转换
查看>>