poj3264 线段树
再次理解线段树。比第一次又有了更深刻的认识,虽然还不能完全靠自己写出来,但自己慢慢的去摸索,一定能慢慢理解那个套路了。加油,拿下线段树。
同时,推荐北大郭炜讲的线段树。
poj3264
#include <iostream>#include <algorithm>#include <numeric> using namespace std;#define MY_MIN 99999999#define MY_MAX -99999999struct CNode{int L,R;int nMin,nMax; CNode *pLeft,*pRight;}; int min ( const int a, const int b ) {return (b<a)?b:a; }int max ( const int a, const int b ) {return (b<a)?a:b; } int nMax,nMin; //用于记录最大值和最小值CNode Tree[1000000]; //一般为叶子节点的两倍int nCount=0; //总节点数 void Build(CNode *pRoot,int L,int R){//建线段树 pRoot->L=L;pRoot->R=R; pRoot->nMin=MY_MIN;pRoot->nMax=MY_MAX;if(L!=R){ nCount++; pRoot->pLeft=Tree+nCount; nCount++; pRoot->pRight=Tree+nCount; Build(pRoot->pLeft,L,(L+R)/2); Build(pRoot->pRight,(L+R)/2+1,R); } } void Insert(CNode *pRoot,int i,int v){//将第i个数(其值为v)插入到线段树中 if(pRoot->L==i && pRoot->R==i){ pRoot->nMin=pRoot->nMax=v;return; } pRoot->nMax=max(pRoot->nMax,v); pRoot->nMin=min(pRoot->nMin,v);if(i<=(pRoot->R+pRoot->L)/2){ Insert(pRoot->pLeft,i,v); }else{ Insert(pRoot->pRight,i,v); }} void Query(CNode *pRoot,int L,int R){if( pRoot->nMin>= nMin && pRoot->nMax <= nMax) //这没理解到。哎。 return;if(pRoot->L==L && pRoot->R==R) { nMax=max(pRoot->nMax,nMax); //这当时也没注意到要用函数。 nMin=min(pRoot->nMin,nMin); return; }else if(R<=(pRoot->R+pRoot->L)/2){ Query(pRoot->pLeft,L,R); }else if(L>=(pRoot->R+pRoot->L)/2+1){ Query(pRoot->pRight,L,R); }else{ Query(pRoot->pLeft,L,(pRoot->R+pRoot->L)/2); Query(pRoot->pRight,(pRoot->R+pRoot->L)/2+1,R); }} int main(){int m,n,x,y;int v,i; scanf("%d %d",&m,&n); Build(Tree,1,m);for(i=1;i<=m;i++){ scanf("%d",&v); Insert(Tree,i,v); }for(i=1;i<=n;i++){ scanf("%d%d",&x,&y); nMax = MY_MAX; nMin = MY_MIN; Query(Tree,x,y); printf("%d\n",nMax-nMin); }return 0;}
转载于:https://www.cnblogs.com/Jason-Damon/archive/2012/02/21/2361937.html
poj3264 线段树相关推荐
- POJ3264[线段树]
就是说有一个序列长度为n,q次询问,询问区间内最大值与最小值的差 可以说是经典的线段树板子题.. 第一次写线段树,有些漏洞请大家及时提出. 线段树大概就是将元素分配,蒟蒻语文不好,大家请看图 [图片来 ...
- POJ3264 Balanced Lineup【线段树】
Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 63040 Accepted: 29405 ...
- POJ3264——Balanced Lineup(线段树)
本文出自:http://blog.csdn.net/svitter 题意:在1~200,000个数中.取一段区间.然后在区间中找出最大的数和最小的数字.求这两个数字的差. 分析:按区间取值,非常明显使 ...
- poj 3264 Balanced Lineup RMQ问题 线段树
For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) always line up in the same order. One d ...
- 二逼平衡树——树套树(线段树套Splay平衡树)
题面 Bzoj3196 解析 线段树和Splay两棵树套在一起,常数直逼inf,但最终侥幸过了 思路还是比较简单, 在原数组维护一个下标线段树,再在每一个线段树节点,维护一个对应区间的权值Splay. ...
- 线段树——HDU - 1698
题目含义 就是初始化一堆数为1 可以经过操作把一个区间的数都改变 并求这堆数的总大小 题目分析 有一个 #include<iostream> #include<stdio.h> ...
- BZOJ.1558.[JSOI2009]等差数列(线段树 差分)
BZOJ 洛谷 首先可以把原序列\(A_i\)转化成差分序列\(B_i\)去做. 这样对于区间加一个等差数列\((l,r,a_0,d)\),就可以转化为\(B_{l-1}\)+=\(a_0\),\(B ...
- 【线段树分治 线性基】luoguP3733 [HAOI2017]八纵八横
不知道为什么bzoj没有HAOI2017 题目描述 Anihc国有n个城市,这n个城市从1~n编号,1号城市为首都.城市间初始时有m条高速公路,每条高速公路都有一个非负整数的经济影响因子,每条高速公路 ...
- [bzoj1582][Usaco2009 Hol]Holiday Painting 节日画画_线段树
Holiday Painting 节日画画 bzoj-1582 Usaco-2009 Hol 题目大意:给定两个n*m的01网格图.q次操作,每次将第二个网格图的子矩阵全部变成0或1,问每一次操作后两 ...
最新文章
- 由laravel 5.5无法获取url中的参数引发的apache的.htaccess文件问题
- 实践篇:利用函数计算轻松构建全文检索系统
- SQL语句使用大全,最常用的sql语句
- C++:如何更改visual studio 2017的主题颜色?
- 基于深度学习的咖啡叶病害识别和严重程度评估(源代码+数据集)
- java路径在那_Java 路径
- 10.一文了解JAVA反射超详尽知乎
- iOS 算法的前世今生:算法原理、常用算法(二)加密算法
- AI智能电话机器人源码搭建原理及步骤
- C# 中取绝对值的函数
- linux 命令 dd 详解
- 大数据在人力资源管理当中的应用
- SpringCloud Gateway堆外内存溢出排查
- 618终极剁手攻略,收割全套数据分析师课程!
- 甘特图:项目进度管理的必备工具
- 笔试题33——双队列解决全排列拼接问题
- 方案怎么写,才能打动客户?哪些内容才是客户眼中的干货?
- 关于中国电信、中国联通5G网络的几点思考
- Linux下数据盘挂载、分区、卸载
- 【wxwidgets】
热门文章
- .NET C#语言基础 20140814
- 机器人产业一定有美好未来
- Python程序设计之迭代器和生成器示例
- 计算机技术在职研究生学校,计算机技术在职研究生招生2020
- 028_jQuery数据
- 008_html属性
- nacos 环境切换_Nacos多环境配置
- php扩展-ioncube组件的安装方法_Windows系统PHPStudy Web环境安装ionCube扩展软件
- r语言electricity数据集_R语言学习-数据集
- python的celery的面试_python 面试