nyoj 1185 最大最小值【线段树最大值最小值维护】
最大最小值
- 描述
-
给出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)。 - 输出
- 按照题意描述输出。每个输出占一行。
- 样例输入
-
2
4
1 3 2 4
2
1 1 4
2 2 3
5
1 2 3 4 5
1
3 1 5 - 样例输出
-
1
3
6#include<stdio.h>
#include<string.h>
#include<algorithm>
#define MAX 10010
using namespace std;
int Min[MAX<<2];
int Max[MAX<<2];
void pushup(int o)
{
Max[o]=max(Max[o<<1],Max[o<<1|1]);
Min[o]=min(Min[o<<1],Min[o<<1|1]);
}
void gettree(int o,int l,int r)
{
int a;
if(l==r)
{
scanf("%d",&a);
Max[o]=Min[o]=a;
return ;
}
int mid=(l+r)>>1;
gettree(o<<1,l,mid);
gettree(o<<1|1,mid+1,r);
pushup(o);
}
int find1(int o,int l,int r,int L,int R)
{
if(L<=l&&R>=r)
{
return Min[o];
}
int mid=(l+r)>>1;
int ans=MAX;
if(mid>=R)
ans=min(find1(o<<1,l,mid,L,R),ans);
else if(mid<L)
ans=min(find1(o<<1|1,mid+1,r,L,R),ans);
else
{
ans=min(find1(o<<1,l,mid,L,R),ans);
ans=min(find1(o<<1|1,mid+1,r,L,R),ans);
}
return ans;
}
int find2(int o,int l,int r,int L,int R)
{
if(L<=l&&R>=r)
return Max[o];
int mid=(l+r)>>1;
int ans=-100;
if(R<=mid)
ans=max(ans,find2(o<<1,l,mid,L,R));
else if(L>mid)
ans=max(ans,find2(o<<1|1,mid+1,r,L,R));
else
{
ans=max(ans,find2(o<<1,l,mid,L,R));
ans=max(ans,find2(o<<1|1,mid+1,r,L,R));
}
return ans;
}
int main()
{
int t,n,m,j,i;
int a,b,c;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
gettree(1,1,n);
scanf("%d",&m);
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&c);
if(a==1)
{
printf("%d\n",find1(1,1,n,b,c));
}
if(a==2)
{
printf("%d\n",find2(1,1,n,b,c));
}
if(a==3)
{
printf("%d\n",find1(1,1,n,b,c)+find2(1,1,n,b,c));
}
}
}
return 0;
}
nyoj 1185 最大最小值【线段树最大值最小值维护】的更多相关文章
- CSU 1809 - Parenthesis - [前缀和+维护区间最小值][线段树/RMQ]
题目链接:http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1809 Bobo has a balanced parenthesis sequenc ...
- TZOJ 3315 买火车票(线段树区间最小值)
描述 Byteotian州铁道部决定赶上时代,为此他们引进了城市联网.假设城市联网顺次连接着n 个市从1 到n 编号(起始城市编号为1,终止城市编号为n).每辆火车有m个座位且在任何两个运送更多的乘客 ...
- POJ 3171 区间覆盖最小值&&线段树优化dp
Cleaning Shifts Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4715 Accepted: 1590 D ...
- 区间最小值 线段树 (2015年 JXNU_ACS 算法组暑假第一次周赛)
区间最小值 Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other) Total Submiss ...
- ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 D 80 Days (线段树查询最小值)
题目4 : 80 Days 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 80 Days is an interesting game based on Jules Ve ...
- tyvj 1038 忠诚 区间最小值 线段树或者rmq
P1038 忠诚 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天 ...
- hdoj 2795 Billboard 【线段树 单点更新 + 维护区间最大值】
Billboard Time Limit: 20000/8000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- HDU 1754 I Hate It 【线段树单点修改 维护区间最大值】
题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1754 I Hate It Time Limit: 9000/3000 MS (Java/Others ...
- 【BZOJ 2957】楼房重建&&Codechef COT5 Count on a Treap&&【NOIP模拟赛】Weed 线段树的分治维护
线段树是一种作用于静态区间上的数据结构,可以高效查询连续区间和单点,类似于一种静态的分治.他最迷人的地方在于“lazy标记”,对于lazy标记一般随我们从父区间进入子区间而下传,最终给到叶子节点,但还 ...
随机推荐
- jQuery 之 .stop() 方法
总结version 1.7版本前.stop([clearQueue][,jumpToEnd])clearQueue: 布尔值,默认是 false;此值处理是相关的动画队列是否移除,如果为 false ...
- CSS3鼠标移入移出图片生成随机动画
今天分享使用html+css3+少量jquery实现鼠标移入移出图片生成随机动画,我们先看最终效果图(截图为静态效果,做出来可是动态的哟) 左右旋转 上下移动 缩放 由于时间关系我就不一步步解析各段代 ...
- php date('Y')
date('Y')默认是y-12-01 date('Y-01')!!!才是我需要的
- 在windows下的mysql使用
具体可参照http://jingyan.baidu.com/article/3aed632e19b5e8701080918f.html 1.安装mysql. 直接百度搜索mysql下载.
- linux安装ruby ruby-devel rubygems bundler
linux安装ruby ruby-devel rubygems yum install ruby ruby-devel rubygems 安装bundler gem install bundleror ...
- 程序在nor flash中真的可以运行吗?
程序在nor flash中可以运行,但是是有限制的,它不能像RAM那样随意的写(尽管它可以随意的读).在norflash上,不能运行写存储器的指令,不过排除写的地方是RAM类.实验中的三个文件如下所示 ...
- Jsop入门程序
package com.baidu; import java.io.IOException; import org.jsoup.Jsoup;import org.jsoup.nodes.Documen ...
- ubuntu 64bit “arm-linux-gcc: No such file or directory”问题的解决方法
安装lsb-core sudo apt-get install lsb-core
- TortoiseSVN下载,安装,配置,常用操作 svn教程
一. 首先在百度搜索并下载 TortoiseSVN 推荐从官网下载,软件分为32位和64位版本,下载时请根据自己的系统位数进行下载:
- Delphi xe10下载(包含破解补丁和破解视频)
软件名称:RAD Studio 10 Seattle软件大小:7.18 GB RAD Studio 10 Seattle官方下载地址:http://altd.embarcadero.com/downl ...