区间最小值

Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other)
Total Submission(s) : 12   Accepted Submission(s) : 5

Font: Times New Roman | Verdana | Georgia

Font Size: ← →

Problem Description

给定一个数字序列,查询随意给定区间内数字的最小值。

Input

输入包括多组測试用例,每组測试用例的开头为一个整数n(1<=n<=100000)。代表数字序列的长度。

接下去一行给出n个数字,代表数字序列。

数字在int范围内。

下一行为一个整数t(1<=t<=10000),代表查询的次数。

最后t行,每行给出一个查询。由两个整数表示l、r(1<=l<=r<=n)。

Output

对于每一个查询,输出区间[l,r]内的最小值。

Sample Input

  1. 5
  2. 3 2 1 4 3
  3. 3
  4. 1 3
  5. 2 4
  6. 4 5

Sample Output

  1. 1
  2. 1
  3. 3

Author

吴迎

线段树问题。感觉这是最美的数据结构~

非常基础的线段树问题。对于这不懂的还是多多百度呀。

  1. #include <stdio.h>
  2. #include <algorithm>
  3. using namespace std;
  4. int num[100005];
  5. struct node
  6. {
  7. int left,right,val;//每一个节点有三个值,左区间,右区间,和最小值
  8. }c[100005*4];
  9. void build_tree(int l,int r,int root)//建树
  10. {
  11. c[root].left=l;
  12. c[root].right=r;
  13. if(l==r)//假设左区间等于右区间就赋值
  14. {
  15. c[root].val=num[l];
  16. return ;
  17. }
  18. int mid=(l+r)/2;
  19. build_tree(l,mid,root*2);
  20. build_tree(mid+1,r,root*2+1);
  21. c[root].val=min(c[root*2].val,c[root*2+1].val);//递归得到
  22. }
  23. void find_tree(int l,int r,int &min1,int root)//查找
  24. {
  25. if(c[root].left==l&&c[root].right==r)
  26. {
  27. min1=c[root].val;
  28. return ;
  29. }
  30. int mid=(c[root].left+c[root].right)/2;
  31. if(mid<l)//先找到所要寻找的区间在树上的区间范围
  32. find_tree(l,r,min1,root*2+1);
  33. else if(mid>=r)
  34. find_tree(l,r,min1,root*2);
  35. else//找到了所要找的区间
  36. {
  37. int min2;
  38. find_tree(l,mid,min1,root*2);//左儿子一个最小值
  39. find_tree(mid+1,r,min2,root*2+1);//右儿子一个最小值
  40. min1=min(min1,min2);//选最小的
  41. }
  42.  
  43. }
  44. int main()
  45. {
  46. int n,k;
  47. while(scanf("%d",&n)!=EOF)
  48. {
  49. for(int i=1;i<=n;i++)
  50. scanf("%d",&num[i]);
  51. build_tree(1,n,1);
  52. scanf("%d",&k);
  53. while(k--)
  54. {
  55. int a,b,min1;
  56. scanf("%d %d",&a,&b);
  57. find_tree(a,b,min1,1);
  58. printf("%d\n",min1);
  59. }
  60. }
  61. return 0;
  62. }

区间最小值 线段树 (2015年 JXNU_ACS 算法组暑假第一次周赛)的更多相关文章

  1. 区间最小值(2) (线段树 更新区间)2015年 JXNU_ACS 算法组暑假第一次周赛

    区间最小值(2) Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Total Subm ...

  2. CSU 1809 - Parenthesis - [前缀和+维护区间最小值][线段树/RMQ]

    题目链接:http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1809 Bobo has a balanced parenthesis sequenc ...

  3. tyvj 1038 忠诚 区间最小值 线段树或者rmq

    P1038 忠诚 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天 ...

  4. 【BZOJ4653】【NOI2016】区间(线段树)

    [BZOJ4653][NOI2016]区间(线段树) 题面 BZOJ 题解 \(NOI\)良心送分题?? 既然是最大长度减去最小长度 莫名想到那道反复减边求最小生成树 从而求出最小的比值 所以这题的套 ...

  5. hdu 5700区间交(线段树)

    区间交 Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submiss ...

  6. BZOJ_4653_[Noi2016]区间_线段树+离散化+双指针

    BZOJ_4653_[Noi2016]区间_线段树+离散化+双指针 Description 在数轴上有 n个闭区间 [l1,r1],[l2,r2],...,[ln,rn].现在要从中选出 m 个区间, ...

  7. xdoj-1324 (区间离散化-线段树求区间最值)

    思想 : 1 优化:题意是覆盖点,将区间看成 (l,r)转化为( l-1,r) 覆盖区间 2 核心:dp[i]  覆盖从1到i区间的最小花费 dp[a[i].r]=min (dp[k])+a[i]s; ...

  8. Codeforces Round #538 (Div. 2) F 欧拉函数 + 区间修改线段树

    https://codeforces.com/contest/1114/problem/F 欧拉函数 + 区间更新线段树 题意 对一个序列(n<=4e5,a[i]<=300)两种操作: 1 ...

  9. POJ 2528 - Mayor's posters - [离散化+区间修改线段树]

    题目链接:http://poj.org/problem?id=2528 Time Limit: 1000MS Memory Limit: 65536K Description The citizens ...

随机推荐

  1. hdu3652B-number(数位dp)

    B-number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  2. 通过DOM实现点击隐藏父元素

    HTML代码简单如下: <ul id='ul1'> <li><a href="javascript:">1</a></li&g ...

  3. CALayer帧动画

    CALayer帧动画 _sunLayer = [[CALayer alloc]init]; _sunLayer.contents = (id)[UIImage imageNamed:@"su ...

  4. 深入理解Redis(一)——高级键管理与数据结构

    引语 这个章节主要讲解了三部分内容: 如何设计并管理Redis的键以及与其关联的数据结构: 了解并使用Redis客户端对象映射器: 介绍如何利用大O标记来评估Redis性能. 键与数据结构 键 我们先 ...

  5. pdf 转成 一张图片

    1.maven依赖 <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfb ...

  6. python2.X现在不能安装Django了:Collecting django Using cached Django-2.0.tar.gz

    使用pip安装django2: pip install django 报错: Collecting django  Using cached Django-2.0.tar.gz    Complete ...

  7. Run as ant build每次都执行两次-问题解决

    在Eclipse里面,运行ant,整个测试流程总是执行两遍,其几天试了下在DOS命令行直接调用ant, 结果发现只执行了一次,并且内存消耗好像也没那么大了,估计是eclipse自己的问题.问题解决了, ...

  8. Unity引擎的Player Settings介绍

    我用的是unity5.4.3版本的 一.窗口打开: 从菜单栏查看播放器设置,选择 Edit->Project Settings->Player 二.全局设置 第一部分: Company N ...

  9. ie8及其以下版本兼容性问题之文本省略

    1. 单行文本省略 单行文本省略适用于文本超出内容显示区,则在末尾显示省略号 1.1 普通文本超出省略 普通文本超出显示省略号,示例: .p{ height: 30px line-height: 30 ...

  10. Apache安装简述

    软件下载地址:http://pan.baidu.com/s/1o8oexKI 1.httpd -k install 2.httpd -k restart 3.启动bin文件夹里的httpd.exe 4 ...