题意:给出n个数,a1,a2,a3,---,an,再给出q次询问区间al到ar之间的最大值和最小值的差

学习线段树的第一道题目 学习的这一篇

http://www.cnblogs.com/kuangbin/archive/2011/08/14/2137862.html

 #include<iostream>
#include<cstdio>
#include<cstring>
#include <cmath>
#include<stack>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<algorithm>
using namespace std; typedef long long LL;
const int INF = (<<)-;
const int mod=;
const int maxn=; int a[maxn];
int nmax,nmin; struct node{
int l,r;//记录区间的左右端点
int nmax,nmin;//记录区间的最大值,最小值
}; node tree[*maxn]; void build_tree(int i,int l,int r){//建树
tree[i].l=l;
tree[i].r=r;
if(l==r){
tree[i].nmin=tree[i].nmax=a[l];
return;
}
int mid=(l+r)/;
build_tree(*i,l,mid);
build_tree(*i+,mid+,r);
tree[i].nmin=min(tree[*i].nmin,tree[*i+].nmin);
tree[i].nmax=max(tree[*i].nmax,tree[*i+].nmax);
} void query(int i,int l,int r){//查询
if(tree[i].nmin>=nmin&&tree[i].nmax<=nmax) return;
if(tree[i].l==l&&tree[i].r==r){
nmin = min(tree[i].nmin,nmin);
nmax = max(tree[i].nmax,nmax);
return;
}
int mid=(tree[i].l+tree[i].r)/;
if(r<=mid) query(*i,l,r);
else if(l>mid) query(*i+,l,r);
else{
query(*i,l,mid);
query(*i+,mid+,r);
}
} int main(){
int n,q;
while(scanf("%d %d",&n,&q)!=EOF){
for(int i=;i<=n;i++) scanf("%d",&a[i]);
build_tree(,,n); while(q--){
nmin=INF;nmax=-INF;
int l,r;
scanf("%d %d",&l,&r);
query(,l,r);
printf("%d\n",nmax-nmin);
}
}
return ;
}

另外这道题用cin会超时

最新文章

  1. [LeetCode] Fizz Buzz 嘶嘶嗡嗡
  2. ios 尺寸
  3. 老王Python培训视频教程(价值500元)【基础进阶项目篇 &ndash; 完整版】
  4. hiho1091_clicker背包问题
  5. python 绘图工具 matplotlib 入门
  6. JDBC连接各种数据库的方法(经典)
  7. 一个inline-block的样式。
  8. ScrollView can host only one direct child 解决
  9. windows 进程间通讯方法
  10. 利用netstat和tasklist查看PC的端口占用情况
  11. SDL2源码分析6:拷贝到渲染器(SDL_RenderCopy())
  12. WebCollector 2.x 新手教程
  13. 转载 deep learning:八(SparseCoding稀疏编码)
  14. linux使用LVM合并硬盘
  15. DNS Prefetch初认识
  16. odoo Model字段的参数
  17. MVC(面试)
  18. Python文件学习
  19. 未能找到 CodeDom 提供程序类型“Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider,
  20. P1349 广义斐波那契数列(矩阵加速)

热门文章

  1. Asp.net Web Api中使用配置Unity
  2. LeetCode(15)3Sum
  3. windows下git server搭建
  4. 结构化编程-Structured programming
  5. OCR文字识别软件FineReader系列产品双十一特惠!
  6. 第三章 Python函数
  7. Pyhton学习——Day27
  8. C# 基础复习 四 多线程
  9. 四则运算2(最终版)java+jps+sqlServer
  10. JVM运行原理详解