例题1.18 开放式学分制 UVa11078
来源:互联网 发布:淘宝卖视频教程类目 编辑:程序博客网 时间:2024/05/01 17:42
1.题目描述:点击打开链接
2.解题思路:本题一看n的范围高达100000,肯定只能用O(N)的复杂度解决。本题类似于最大连续和问题,事先计算区间[0,i)的最大值,存放到_max数组中,然后扫描整个数组,不断用max(ans,_max[i]-a[i])更新最大差值即可。本题附上利用O(1)更新MaxAi来计算最大值的程序。更新顺序值得学习!
3.代码:
#define _CRT_SECURE_NO_WARNINGS #include<iostream>#include<algorithm>#include<string>#include<sstream>#include<set>#include<vector>#include<stack>#include<map>#include<queue>#include<deque>#include<cstdlib>#include<cstdio>#include<cstring>#include<cmath>#include<ctime>#include<functional>using namespace std;#define N 100000+10#define INF 150000+10int a[N];int _max[N];void init(){for (int i = 0; i < N; i++)_max[i] = -INF;}int main(){//freopen("t.txt", "r", stdin);int T;cin >> T;while (T--){init();int n;cin >> n;for (int i = 0; i < n; i++)cin >> a[i];for (int i = 1; i <= n; i++)_max[i] = max(_max[i - 1], a[i - 1]);int ans = -2 * INF;for (int i = 1; i < n; i++)ans = max(ans, _max[i] - a[i]);printf("%d\n", ans);}return 0;}
参考程序:
#define _CRT_SECURE_NO_WARNINGS #include<iostream>#include<algorithm>#include<string>#include<sstream>#include<set>#include<vector>#include<stack>#include<map>#include<queue>#include<deque>#include<cstdlib>#include<cstdio>#include<cstring>#include<cmath>#include<ctime>#include<functional>using namespace std;#define N 100000int a[N], n;int main(){//freopen("t.txt", "r", stdin);int T;cin >> T;while (T--){scanf("%d", &n);for (int i = 0; i < n; i++)scanf("%d", a + i);int ans = a[0] - a[1];int MaxAi = a[0];for (int j = 1; j < n; j++){ans = max(ans, MaxAi - a[j]);MaxAi = max(a[j], MaxAi);//MaxAi晚于ans更新,因为更新ans时候MaxAi不包括第j个数}printf("%d\n", ans);}return 0;}
0 0
- 例题1.18 开放式学分制 UVa11078
- 第一章例题18开放式学分制UVa11078
- uva11078 - Open Credit System(开放式学分制)
- UVA11078开放式学分制(前面-后面的最大值)
- 开放式学分制
- UVa 11078 - Open Credit System(开放式学分制)
- 水题,高效,优化(开放式学分制,uva 11078)
- uva11078
- uva11078
- UVa11078
- uva 11078 开放式学分制 便于理解下尺取法以及动态的思想吧
- 关于学分制
- uva11078【RMQ】
- UVA11078 Open Credit System
- UVa11078 - Open Credit System
- uva11078- Open Credit System
- uva11078(开放制学分)
- UVA11078 BNU19496 Open Credit System
- hdu 4333 Revolving Digits ( extend kmp )
- 【Unity3D】3D角色换装++ Advance
- 返回值为布尔型引起歧义的面试题
- Material DesignDrawerLayout的旋转箭头的实现方式。
- 黑马程序员——java基础学习笔记——第二天
- 例题1.18 开放式学分制 UVa11078
- 篮桥杯 打印十字图
- CodeForces 383C Propagating tree 树上哈希+树状数组
- BufferedWite
- Java线程:线程状态的转换
- c语言3月12日学习总结
- 合天安全实验室CTF之Steg150
- 项目出现的问题总结
- C++中虚函数工作原理和(虚)继承类的内存占用大小计算