NYOJ 1185 最大最小值 (线段树区间最值 水)
来源:互联网 发布:tenga淘宝 编辑:程序博客网 时间:2024/06/05 17:38
最大最小值
时间限制:1000 ms | 内存限制:65535 KB
难度:2
- 描述
- 给出N个整数,执行M次询问。对于每次询问,首先输入三个整数C、L、R:
如果C等于1,输出第L个数到第R个数之间的最小值;
如果C等于2,输出第L个数到第R个数之间的最大值;
如果C等于3,输出第L个数到第R个数之间的最小值与最大值的和。
(包括第L个数和第R个数)。- 输入
- 首先输入一个整数T(T≤100),表示有T组数据。
对于每组数据,先输入一个整数N(1≤N≤10000),表示有N个整数;
接下来一行有N个整数a(1≤a≤10000);
然后输入一个整数M,表示有M次询问;
接下来有M行(1≤M≤10000),每行有3个整数C、L、R(1≤C≤3,1≤L≤R≤N)。 - 输出
- 按照题意描述输出。每个输出占一行。
- 样例输入
241 3 2 421 1 42 2 351 2 3 4 513 1 5
- 样例输出
136
ac代码:
#include<stdio.h>#define MAXN 100100int MIN(int a,int b){return a>b?b:a;}int MAX(int a,int b){return a>b?a:b;}struct s{int left;int right;int min;int max;}tree[MAXN*3];int num[MAXN];void build(int l,int r,int i){tree[i].left=l;tree[i].right=r;if(l==r){tree[i].min=num[l];tree[i].max=num[l];}else{int mid;mid=(l+r)/2;build(l,mid,i*2);build(mid+1,r,i*2+1);tree[i].min=MIN(tree[i*2].min,tree[i*2+1].min);tree[i].max=MAX(tree[i*2].max,tree[i*2+1].max); }}int query1(int i,int l,int r){ if(tree[i].left==l&&tree[i].right==r) { return tree[i].min; } if(r<=tree[i*2].right) { return query1(i*2,l,r); } if(l>=tree[i*2+1].left) { return query1(i*2+1,l,r); } int mid=(tree[i].left+tree[i].right)/2; return MIN(query1(i*2,l,mid),query1(i*2+1,mid+1,r)); }int query2(int i,int l,int r){ if(tree[i].left==l&&tree[i].right==r) { return tree[i].max; } if(r<=tree[i*2].right) { return query2(i*2,l,r); } if(l>=tree[i*2+1].left) { return query2(i*2+1,l,r); } int mid=(tree[i].left+tree[i].right)/2; return MAX(query2(i*2,l,mid),query2(i*2+1,mid+1,r)); }int main(){int n,m,t;int i,a,b;int cas=0;scanf("%d",&t);while(t--){ scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d",&num[i]); build(1,n,1); scanf("%d",&m);while(m--){int ch,a,b;scanf("%d%d%d",&ch,&a,&b);if(ch==1){printf("%d\n",query1(1,a,b));}else if(ch==2)printf("%d\n",query2(1,a,b));else if(ch==3)printf("%d\n",query1(1,a,b)+query2(1,a,b));}}return 0;}
0 0
- NYOJ 1185 最大最小值 (线段树 & 区间最值查询)
- NYOJ 1185 最大最小值 (线段树区间最值 水)
- nyoj 1185 线段树区间最大最小值
- NYOJ 1185 最大最小值(线段树—区间求最值)
- nyoj--1185--最大最小值(线段树)
- nyoj 1185 最大最小值 (线段树)
- nyoj 最大最小值 1185 (线段树)
- nyoj 1185 最大最小值【线段树】
- nyoj 1185 最大最小值 【线段树】
- nyoj 1185 最大最小值【线段树】
- NYOJ 1185-最大最小值【线段树:模板--学习ing】
- poj3264线段树---区间最大最小值查询(RMQ)
- poj2823------线段树-------求区间最大最小值(RMQ)
- poj3264(线段树求区间最大最小值)
- 线段树求解区间最大最小值(模板)
- poj 3264 线段树区间最大最小值
- 线段树求解区间最大最小值
- 线段树查询区间最大最小值
- sqlcipher-jdbc编译
- 02_flink 流处理
- android MVVM 数据绑定初体验
- [群友反馈] 程序猿身上的缺点
- Opencv For Android: 如何显示摄像头预览
- NYOJ 1185 最大最小值 (线段树区间最值 水)
- Android开发懒人库 -- ButterKnife
- WEB服务器、应用程序服务器、HTTP服务器区别
- IPC—信号量
- 45.Oracle数据库SQL开发之 日期和时间的存储与处理——使用时间戳
- JS初体验(一)
- Android Studio如何更改icon图标
- [01]基本语法
- 微博内容正则表达式匹配链接, 话题标签与@用户