最大最小值

时间限制: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)。
输出
按照题意描述输出。每个输出占一行。
样例输入
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>
using namespace std;
#define M 10000+20
int g[M];
struct tree
{
int left,right;
int minn,maxn;
}num[M*100];
int buildmin(int left,int right,int node)
{
int mid;
num[node].left=left;
num[node].right=right;
if(left==right)
return num[node].minn=g[left];
mid=(left+right)/2;
return num[node].minn=min(buildmin(left,mid,node*2),buildmin(mid+1,right,node*2+1));
}
int buildmax(int left,int right,int node)
{
int mid;
num[node].left=left;
num[node].right=right;
if(left==right)
return num[node].maxn=g[left];
mid=(left+right)/2;
return num[node].maxn=max(buildmax(left,mid,node*2),buildmax(mid+1,right,node*2+1));
}
int querymax(int left,int right,int node)
{
int mid;
if(left==num[node].left&&right==num[node].right)
return num[node].maxn;
mid=(num[node].left+num[node].right)/2;
if(right<=mid)
querymax(left,right,node*2);
else
{
if(left>mid)
return querymax(left,right,node*2+1);
else
return max(querymax(left,mid,node*2),querymax(mid+1,right,node*2+1));
}
}
int querymin(int left,int right,int node)
{
int mid;
if(left==num[node].left&&right==num[node].right)
return num[node].minn;
mid=(num[node].left+num[node].right)/2;
if(right<=mid)
querymin(left,right,node*2);
else
{
if(left>mid)
return querymin(left,right,node*2+1);
else
return min(querymin(left,mid,node*2),querymin(mid+1,right,node*2+1));
}
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&g[i]);
buildmin(1,n,1);
buildmax(1,n,1);
int m;
scanf("%d",&m);
while(m--)
{
int a,b,c;
scanf("%d%d%d",&c,&a,&b);
if(c==1)
printf("%d\n",querymin(a,b,1));
else if(c==2)
printf("%d\n",querymax(a,b,1));
else printf("%d\n",querymin(a,b,1)+querymax(a,b,1));
}
}
return 0;
}


nyoj--1185--最大最小值(线段树)的更多相关文章

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

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

  2. POJ 3171 区间覆盖最小值&&线段树优化dp

    Cleaning Shifts Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4715   Accepted: 1590 D ...

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

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

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

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

  5. nyoj 1185 最大最小值【线段树最大值最小值维护】

    最大最小值 时间限制:1000 ms  |  内存限制:65535 KB 难度:2   描述 给出N个整数,执行M次询问. 对于每次询问,首先输入三个整数C.L.R: 如果C等于1,输出第L个数到第R ...

  6. The Preliminary Contest for ICPC China Nanchang National Invitational I. Max answer (单调栈+线段树)

    题目链接:https://nanti.jisuanke.com/t/38228 题目大意:一个区间的值等于该区间的和乘以区间的最小值.给出一个含有n个数的序列(序列的值有正有负),找到该序列的区间最大 ...

  7. Codeforces 914D - Bash and a Tough Math Puzzle 线段树,区间GCD

    题意: 两个操作, 单点修改 询问一段区间是否能在至多一次修改后,使得区间$GCD$等于$X$ 题解: 正确思路; 线段树维护区间$GCD$,查询$GCD$的时候记录一共访问了多少个$GCD$不被X整 ...

  8. 线段树(Segment Tree)总结

    0 写在前面 怎么说呢,其实从入坑线段树一来,经历过两个阶段,第一个阶段是初学阶段,那个时候看网上的一些教学博文和模板入门了线段树, 然后挑选了一个线段树模板作为自己的模板,经过了一点自己的修改,然后 ...

  9. bzoj 1828: [Usaco2010 Mar]balloc 农场分配【贪心+线段树】

    长得挺唬人的贪心,按照右端点排序,用最小值线段树的询问判断当前牛是否能放进去,能的话更新线段树,ans++ 来自https://www.cnblogs.com/rausen/p/4529245.htm ...

  10. POJ 2376 Cleaning Shifts (线段树优化DP)

    题目大意:给你很多条线段,开头结尾是$[l,r]$,让你覆盖整个区间$[1,T]$,求最少的线段数 题目传送门 线段树优化$DP$裸题.. 先去掉所有能被其他线段包含的线段,这种线段一定不在最优解里 ...

随机推荐

  1. python之路——二分查找算法

    楔子 如果有这样一个列表,让你从这个列表中找到66的位置,你要怎么做? l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72 ...

  2. ASP.NET MVC4入门到精通系列目录汇总(转)

    序言 最近公司在招.NET程序员,我发现好多来公司面试的.NET程序员居然都没有 ASP.NET MVC项目经验,其中包括一些工作4.5年了,甚至8年10年的,许多人给我的感觉是:工作了4.5年,We ...

  3. 前端-JQ思维导图

    看不清的朋友右键保存或者新窗口打开哦!喜欢我可以关注我,还有更多前端思维导图笔记

  4. 命令行 RSA, Base64, Hash

    序 # -n 可以去掉换行符 echo -n '777777' RSA算法 加密 # 利用管道命令传递字符串加密 echo -n '777777' | openssl rsautl -encrypt ...

  5. 00--C++牛人的博客

    那些C++牛人的博客 这篇文章来自转载,转载的网址找不到了,   如果有人知道,可以在下面评论,   非常感谢,更感谢原作者. 现整理收集C++世界里那些“牛人”的个人博客.凡三类:一是令人高山仰止的 ...

  6. 一系列令人敬畏的.NET核心库,工具,框架和软件

    内容 一般 框架,库和工具 API 应用框架 应用模板 身份验证和授权 Blockchain 博特 构建自动化 捆绑和缩小 高速缓存 CMS 代码分析和指标 压缩 编译器,管道工和语言 加密 数据库 ...

  7. 怎么用js或jq点击展开,出现隐藏的DIV,点击收起DIV又隐藏起来.

    方法一:1 <script type="text/javascript"> $(function() { $("#toggle").click(fu ...

  8. 洛谷P2894 [USACO08FEB]酒店Hotel_区间更新_区间查询

    Code: #include<cstdio> #include<algorithm> #include<cstring> using namespace std; ...

  9. elasticsearch多种搜索方式

    简要 1.query string search2.query DSL3.query filter4.full-text search5.phrase search6.highlight search ...

  10. react实现简单倒计时

    今天遇到一个简单的小功能,看网上的一些方法感觉不太适合,所以就手敲了一个,直接上代码!!! import React, { Component } from 'react'; class NoTime ...