南阳 oj119 线段树 区间最值
来源:互联网 发布:java用户登录权限 编辑:程序博客网 时间:2024/05/18 00:57
/* 思路:线段树的区间查询,区间最值。 但是~~~~ 这时间 唉~~~~~~~~~~~~~ 第二份代码 是过不了的。习惯了那样子写代码。 http://blog.csdn.net/lw277232240/article/details/77092634 这个网站是超级牛逼的线段树大总结大家可以看看*/#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAX 100000*4+10int n,m;int min1[MAX];int max1[MAX];int min2,max2;int min(int x,int y){ if(x<y) return x; return y;}int max(int x,int y){ if(x>y) return x; return y;}void build(int rt,int left,int right){ if(left==right) { scanf("%d",&min1[rt]); max1[rt]=min1[rt]; return ; } else { int mid=(left+right)/2; build(rt*2,left,mid); build(rt*2+1,mid+1,right); min1[rt]=min(min1[rt*2],min1[rt*2+1]); max1[rt]=max(max1[rt*2],max1[rt*2+1]); }}void query(int rt,int left,int right,int l,int r){ if(left>=l&&right<=r) { min2=min(min2,min1[rt]); max2=max(max2,max1[rt]); return ; } int mid=(left+right)/2; if(l<=mid) query(rt*2,left,mid,l,r); if(r>mid) query(rt*2+1,mid+1,right,l,r);}int main(){ scanf("%d%d",&n,&m); build(1,1,n); int x,y; for(int i=1;i<=m;i++) { scanf("%d%d",&x,&y); max2=-1,min2=999999999; query(1,1,n,x,y); printf("%d\n",max2-min2); }}
//这份代码te的#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAX 100000*4+10int n,m;int min1[MAX];int max1[MAX];int min(int x,int y){ if(x<y) return x; return y;}int max(int x,int y){ if(x>y) return x; return y;}void build(int rt,int left,int right){ if(left==right) { scanf("%d",&min1[rt]); max1[rt]=min1[rt]; return ; } else { int mid=(left+right)/2; build(rt*2,left,mid); build(rt*2+1,mid+1,right); min1[rt]=min(min1[rt*2],min1[rt*2+1]); max1[rt]=max(max1[rt*2],max1[rt*2+1]); }}int query(int rt,int left,int right,int l,int r,int &min2){ if(left>=l&&right<=r) { min2=min1[rt]; return max1[rt]; } int mid=(left+right)/2; int p1=-1,p2=-1,m1=100000001,m2=100000001; if(l<=mid) p1=query(rt*2,left,mid,l,r,m1); if(r>mid) p2=query(rt*2+1,mid+1,right,l,r,m2); min2=min(m1,m2); return max(p1,p2);}int main(){ scanf("%d%d",&n,&m); build(1,1,n); int x,y; int min2,max2; for(int i=1;i<=m;i++) { scanf("%d%d",&x,&y); max2=query(1,1,n,x,y,min2); printf("%d\n",max2-min2); }}
阅读全文
1 0
- 南阳 oj119 线段树 区间最值
- 【南阳OJ119】士兵杀敌(三)(线段树)
- 区间最值线段树
- 线段树,区间最值
- 线段树求区间最值
- 区间最值与线段树
- NOJ1042 线段树区间最值
- 线段树+RMQ区间最值问题
- 线段树求区间最值
- 线段树(二)区间最值
- POJ2823(线段树求区间最值)
- 线段树模板(区间最值)
- 【模板】线段树区间最值
- RMQ区间最值(线段树)
- 【模板】线段树_区间最值、区间求和、修改
- 线段树 区间更新 区间求和以及最值
- 【模板】线段树区间修改、区间求和、查询最值
- 线段树入门 区间更新 单点查询 南阳oj 123
- responseBody注解
- 瞎搞DP 改造二叉树
- leetcode Add to List 425. Word Squares
- 【javascript设计模式】1.Constructor(构造器)模式
- java 反射机制
- 南阳 oj119 线段树 区间最值
- Monthly Expense + Copying Books + Aggressive cows
- PYTHON中对象命名的单下划线与双下划线的区别(私有和保护)
- hdu1166-分治&线段树-敌兵布阵
- spark学习网站
- python数据库操作模块MySQLdb简介
- Request和response使用
- 学习笔记 二叉树
- 测灵敏度