zzulioj--1786--求最大值(技巧题)
2015-12-28 11:18
197 查看
1786: 求最大值
Time Limit: 1 Sec Memory Limit:128 MBSubmit: 222 Solved: 46SubmitStatusWebBoardDescription
给定n个数,a[1]到a,请你帮忙找出a[i] - a[j]的最大值,其中1 <= i < j <= n.Input
第一行一个数T,表示一共有T组数据(T <= 20); 每组测试数据第一行一个整数n(2 <= n <= 10 ^ 5),表示接下来有n个数,第二行n个整数,不超过10 ^ 6,中间用空格隔开。Output
每组数据输出一行,表示最大值是多少。Sample Input
255 2 3 6 123 2Sample Output
51HINT
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int num[100100],pre[100100]; int main() { int t; scanf("%d",&t); while(t--) { int n; scanf("%d",&n); memset(num,0,sizeof(num)); memset(pre,0,sizeof(pre)); scanf("%d",&num[1]); int k=1; pre[1]=1; for(int i=2;i<=n;i++) { scanf("%d",&num[i]); if(num[i]>=num[k]) { k=i; } else { if(pre[k]) { if(num[i]<num[pre[k]]) pre[k]=i; } else pre[k]=i; } } int m=-1; for(int i=1;i<n;i++) m=max(m,num[i]-num[pre[i]]); printf("%d\n",m); } return 0; }
<pre name="code" class="cpp">#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int m,n;int main(){int t;scanf("%d",&t);while(t--){int n;scanf("%d",&n);n--;int m;scanf("%d",&m);int k;int mm=-1;while(n--){scanf("%d",&k);if(k>m)m=k;else{int s=m-k;mm=max(mm,s);}}printf("%d\n",mm);}return 0;}
相关文章推荐
- Android开发之多媒体编程之获取图片的副本
- JavaScrip——练习(做悬浮框再进一步:悬浮窗后缀悬浮窗——用this.className)
- HDOJ-----2036---坐标系中N边形面积
- android layout_gravity失效的问题
- Android 应用退出后销毁apk进程
- android资源选择器URI路径问题
- 阅读源码
- Nosql之redis学习(三)
- 百度地图 JS 可编辑 多边形
- 如何愉快地调试一个 React Native for Android APP
- 文件和流 I/O包含的内容
- CentOS7.0安装与配置Tomcat-7
- VC++6.0版本号程序转成VS2010版
- 简单的计算几何
- Uva12206 Stammering Aliens 后缀数组&&Hash
- jquery $(this).attr $(this).val方法使用介绍--useful
- VMware 增加了一块网卡 不能获取ip地址问题
- 策略模式
- 指针的强制类型转换和动态分配内存
- iOS GCD 队列 线程