The Water Problem

Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 1308    Accepted Submission(s): 1038

Problem Description
In
Land waterless, water is a very limited resource. People always fight
for the biggest source of water. Given a sequence of water sources with a1,a2,a3,...,an representing the size of the water source. Given a set of queries each containing 2 integers l and r, please find out the biggest water source between al and ar.
 
Input
First you are given an integer T(T≤10) indicating the number of test cases. For each test case, there is a number n(0≤n≤1000) on a line representing the number of water sources. n integers follow, respectively a1,a2,a3,...,an, and each integer is in {1,...,106}. On the next line, there is a number q(0≤q≤1000) representing the number of queries. After that, there will be q lines with two integers l and r(1≤l≤r≤n) indicating the range of which you should find out the biggest water source.
 
Output
For each query, output an integer representing the size of the biggest water source.
 
Sample Input
3
1
100
1
1 1
5
1 2 3 4 5
5
1 2
1 3
2 4
3 4
3 5
3
1 999999 1
4
1 1
1 2
2 3
3 3
 
Sample Output
100
2
3
4
4
5
1
999999
999999
1
 
区域赛水题,区间最值。。
//单点更新+区间查找
#include<iostream>
#include <stdio.h>
#include <string.h>
using namespace std; const int Max = ;
int MAXNUM;
int a[Max];
struct Tree{
int Max;
int r,l;
}t[*Max];
int MAX(int k,int j){
if(k>=j) return k;
return j;
}
void build(int idx,int l,int r){
t[idx].l = l;
t[idx].r=r;
if(l==r){
t[idx].Max = a[l];
return;
}
int mid = (l+r)>>;
build(idx<<,l,mid);
build(idx<<|,mid+,r);
t[idx].Max = MAX(t[idx<<].Max,t[idx<<|].Max); //父亲节点 }
void query(int idx,int l,int r,int L,int R){
if(l>=L&&r<=R) {
MAXNUM = MAX(MAXNUM,t[idx].Max);
return;
}
int mid = (l+r)>>;
if(mid>=L)
query(idx<<,l,mid,L,R);
if(mid<R)
query(idx<<|,mid+,r,L,R);
} int main()
{
int tcase;
scanf("%d",&tcase);
while(tcase--){
int n;
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
}
build(,,n);
int m;
scanf("%d",&m);
for(int i=;i<=m;i++){
int l,r;
scanf("%d%d",&l,&r);
MAXNUM = -;
query(,,n,l,r);
printf("%d\n",MAXNUM);
}
}
}

最新文章

  1. SQL Server COM 组件创建实例失败
  2. IDEA14 Ultimate Edition注册码
  3. Genymotion模拟器一滑动页面就跳到搜索003
  4. C#编写Windows服务程序图文教程(转载)
  5. sql2008R2sp1局域网镜像环境实操(无见证服务器)
  6. HiPAC高性能规则匹配算法之查找过程
  7. java它 ------ 图形界面(两)
  8. SublimeLinter 3中使用jshint
  9. 安利给班里的大家一个chrome的GitHub插件-----gayhub
  10. Spring SpringMVC SpringBoot SpringCloud概念、关系及区别
  11. Three ways to detect outliers
  12. 2018Action Recognition from Skeleton Data via Analogical Generalization over Qualitative Representations
  13. Comparable和Comparator的区别&amp;Collections.sort的两种用法
  14. C++设计模式 之 “组件协作”模式:Template Method、Strategy、Observer
  15. .gitignore忽略git版本库中的文件(夹)
  16. print in或者not in, 判断在不在里面
  17. 在使用HttpClient做客户端调用一个API时 模拟并发调用时发生“死锁&quot;?
  18. BubblePopupWindow
  19. C语言函数的概念
  20. Java IO,io,文件操作,删除文件,删除文件夹,获取文件父级目录

热门文章

  1. 【数学 思维题】HDU4473Exam
  2. 【android】6大布局
  3. java的一些相关介绍(2013-10-07-163 写的日志迁移
  4. Form和ModelForm组件
  5. Selenium WebDriver-通过ActionChains实现页面元素拖拽
  6. python week08 并发编程之多线程--实践部分
  7. day04_07 while循环01
  8. 快速排序-php代码实现
  9. [git 学习篇] --创建git创库
  10. [错误处理]python大小写敏感,关键字不要写错