hdu 5443
来源:互联网 发布:dnf一进去网络连接中断 编辑:程序博客网 时间:2024/06/06 11:36
题目概述
给定由N个数构成的数列,进行Q次查询,回答区间[l,r]中最大的数
时限
1000ms/1500ms
输入
第一行整数times,其后times组数据,每组数据第一行整数N,下一行N个整数,下一行整数Q,其后Q行,每行两个整数l,r
限制
1<=times<=10;0<=N<=1000;0<=Q<=1000;
输出
每行一个数,为查询的回答
样例输入
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
样例输出
100
2
3
4
4
5
1
999999
999999
1
讨论
线段树,水题,没什么说的
题解状态
15MS,1764K,1159 B,C++
题解代码
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define INF 0x3f3f3f3f#define MAXN 10004#define memset0(a) memset(a,0,sizeof(a))int N, Q;int L[MAXN], R[MAXN], most[MAXN], nums[MAXN];void build(int i, int l, int r){ L[i] = l, R[i] = r; if (l != r) { build(i * 2, l, (l + r) / 2); build(i * 2 + 1, (l + r) / 2 + 1, r); most[i] = max(most[i * 2], most[i * 2 + 1]); } else most[i] = nums[l];}int query(int i, int l, int r){ if (l == L[i] && r == R[i]) return most[i]; else if (r <= R[i * 2]) return query(i * 2, l, r); else if (l >= L[i * 2 + 1]) return query(i * 2 + 1, l, r); else return max(query(i * 2, l, R[i * 2]), query(i * 2 + 1, L[i * 2 + 1], r));}void fun(){ for (int p = 1; p <= N; p++) scanf("%d", &nums[p]);//input build(1, 1, N); scanf("%d", &Q);//input for (int p = 0; p < Q; p++) { int l, r; scanf("%d%d", &l, &r);//input printf("%d\n", query(1, l, r));//output }}int main(void){ //freopen("nb_cin.txt", "r", stdin); //freopen("nb_cout.txt","w",stdout); int times; scanf("%d", ×);//input while (times--) { scanf("%d", &N);//input fun(); }}
EOF
0 0
- HDU 5443
- hdu 5443
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- hdu-
- hdu
- hdu
- Microservices with Spring
- Expressions and phases for writing
- Windows10 英文版的中文显示
- 防火墙的安全策略
- 计算几何凸包的算法 Andrew和Melkman算法
- hdu 5443
- leetcode 389. Find the Difference 解题报告
- vim 编辑器的使用方法
- 防火墙不能防范的缺陷
- Gear VR 入门教程之二 获取用户输入
- 嗯,kruscal多的就不讲了
- Java面试题集锦
- Caffe安装:Ubuntu14.04+caffe+cuda7.0+cudnnv3.0
- 高级软件工程师之路-磁盘