效率至上
来源:互联网 发布:无需网络的监控摄像头 编辑:程序博客网 时间:2024/04/29 04:26
Problem Description
题意很简单,给出一个数目为n的非有序序列,然后有m次查询.对于每次查询输入两个正整数l,r请输出区间[l,r]的最大值与最小值的差值
Input
第一行:输入两个正整数n,m (1<=n<=50000, 1<=m<=200000 );
第二行:输入n个整数 大小范围为[1,100000];
接下来的m行,每次两个正整数l,r (1<=l<=r<=n);
Output
输出区间[l,r]最大值与最小值的差值.
Example Input
6 3
1
7
3
4
2
5
1 5
4 6
2 2
Example Output
6
3
0
#include<stdio.h>#include<stdlib.h>#define maxn 200010#define lson l,m,rt*2#define rson m+1,r,rt*2+1int sum[maxn];int max[maxn];int min[maxn];int mx=-1,mn=0x3f3f3f;int qmax(int a,int b){ return (a>b?a:b);}int qmin(int a,int b){ return (a>b?b:a);}void pushup (int rt){ sum[rt]=sum[rt*2]+sum[rt*2+1]; max[rt]=qmax(max[rt*2],max[rt*2+1]); min[rt]=qmin(min[rt*2],min[rt*2+1]);}void build (int l,int r,int rt){ int m; if(l==r) { scanf("%d",&sum[rt]); max[rt]=min[rt]=sum[rt]; return ; } m=(l+r)/2; build(lson); build(rson); pushup(rt);}void max_min(int L,int R,int l,int r,int rt){ int m; if(L<=l&&R>=r) { if(max[rt]>mx) mx=max[rt]; if(min[rt]<mn) mn=min[rt]; return ; } m=(l+r)/2; if(L<=m) max_min(L,R,lson); if(R>m) max_min(L,R,rson);}int main(){ int n,m,i; int L,R; scanf("%d%d",&n,&m); build(1,n,1); while(m--) { scanf("%d%d",&L,&R); max_min(L,R,1,n,1); printf("%d\n",mx-mn); mx=-1; mn=0x3f3f3f; } return 0;}
0 0
- 效率至上
- 效率至上
- 效率至上
- 位运算,效率至上
- SDUTOJ----3302效率至上;
- sdutoj 3302 效率至上
- sdutacm-效率至上
- 线段树----效率至上
- 效率至上 计算机使用规范
- 【效率至上】如何才能有效提高工作效率
- 线段树—效率至上
- 效率至上 区间最值
- SDUT-3302-效率至上-RMQ||线段树
- SQLSERVER语句优化及性能调试 第一篇 效率至上
- SDUT 3302 效率至上 求区间内最大最小
- “顾客至上,服务至上”??
- 诚实至上
- 来者至上
- mysql常见优化
- 数组计算机
- AltiumDesign设计小技巧
- R语言安装openxl包报错解决办法
- hdu3346(水题)
- 效率至上
- [错误笔记]同一个HttpClient实例自动管理cookie
- Altiumdesign中信号层的使用
- .gitignore规则无效
- Android 流量监控
- FirewallD入门手册
- CSS3文字与字体相关样式
- 静态广播关闭和启用
- DOM范围