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
- 2
- 样例输出
-
- 1
- 3
- 6
- 1
- 来源
- #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--最大最小值(线段树)的更多相关文章
- CSU 1809 - Parenthesis - [前缀和+维护区间最小值][线段树/RMQ]
题目链接:http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1809 Bobo has a balanced parenthesis sequenc ...
- 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 ...
- tyvj 1038 忠诚 区间最小值 线段树或者rmq
P1038 忠诚 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天 ...
- nyoj 1185 最大最小值【线段树最大值最小值维护】
最大最小值 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 给出N个整数,执行M次询问. 对于每次询问,首先输入三个整数C.L.R: 如果C等于1,输出第L个数到第R ...
- The Preliminary Contest for ICPC China Nanchang National Invitational I. Max answer (单调栈+线段树)
题目链接:https://nanti.jisuanke.com/t/38228 题目大意:一个区间的值等于该区间的和乘以区间的最小值.给出一个含有n个数的序列(序列的值有正有负),找到该序列的区间最大 ...
- Codeforces 914D - Bash and a Tough Math Puzzle 线段树,区间GCD
题意: 两个操作, 单点修改 询问一段区间是否能在至多一次修改后,使得区间$GCD$等于$X$ 题解: 正确思路; 线段树维护区间$GCD$,查询$GCD$的时候记录一共访问了多少个$GCD$不被X整 ...
- 线段树(Segment Tree)总结
0 写在前面 怎么说呢,其实从入坑线段树一来,经历过两个阶段,第一个阶段是初学阶段,那个时候看网上的一些教学博文和模板入门了线段树, 然后挑选了一个线段树模板作为自己的模板,经过了一点自己的修改,然后 ...
- bzoj 1828: [Usaco2010 Mar]balloc 农场分配【贪心+线段树】
长得挺唬人的贪心,按照右端点排序,用最小值线段树的询问判断当前牛是否能放进去,能的话更新线段树,ans++ 来自https://www.cnblogs.com/rausen/p/4529245.htm ...
- POJ 2376 Cleaning Shifts (线段树优化DP)
题目大意:给你很多条线段,开头结尾是$[l,r]$,让你覆盖整个区间$[1,T]$,求最少的线段数 题目传送门 线段树优化$DP$裸题.. 先去掉所有能被其他线段包含的线段,这种线段一定不在最优解里 ...
随机推荐
- tomcat 启动服务器日志小结
1.tomcat 启动服务配置: 目前主要有 ①把编译好war或者项目直接扔到webapps 目录下, 启动bin目录下的startup.bat 即可 ② 在conf目录下 修改 serve ...
- Codeforces Round #445
ACM ICPC 每个队伍必须是3个人 #include<stdio.h> #include<string.h> #include<stdlib.h> #inclu ...
- Intel VTune Amplifier XE 使用
VTune <VTune 开发者手册> 1. 安装 1.1 软件安装 下载: (安装包下载地址) 安装: # 1.解压 tar -zxvf filename.tar.gz # 2.安装 c ...
- ORACLE 11g 导出数据
ORACLE 11g 导出 表的时候 不会导出空表 导出空表操作步骤 :(使用PLSQL) 1.打开SQL window 执行下面的 SQL Select 'alter table '||table_ ...
- Smallest Common Multiple FreeCodeCamp
题目:找出能被两个给定参数和它们之间的连续数字整除的最小公倍数. 范围是两个数字构成的数组,两个数字不一定按数字顺序排序. 分析:首先题目的意思求一个连续数列的所有数字的最小公倍数,这连续的数字序列 ...
- 【转】ROI Pooling
Faster rcnn的整体构架: 训练的大致过程: 1.图片先缩放到MxN的尺寸,之后进入vgg16后得到(W/16,H/16)大小的feature map: 2.对于得到的大小为(W/16,H/1 ...
- linux github 添加ssh
1.本地生成key, xxx 是github 的账号, 执行下面命令一路下一步 ssh-keygen -t rsa -C "xxx" 2.复制下面的public key 到git ...
- java实现QQ空间模拟登录
import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import j ...
- Python面向对象----多态和鸭子类型
1. C#中多态实现的条件是 继承, 重写以及父类指向子类. 但是在弱类型Python里面, 实现多态的条件就显得很简洁, 只需要在子类中实现父类相同名称的方法即可. 2. 鸭子类型的解释: 若一个类 ...
- python 多线程处理框架
多线程处理框架 python2.7 python3.5 多线程通用任务处理型驱动框架 probe_type 探测类型rtsp或者http task_queue 任务队列 task_handler 任务 ...