例题1.18 开放式学分制 UVa11078
2015-03-12 22:09
190 查看
1.题目描述:点击打开链接
2.解题思路:本题一看n的范围高达100000,肯定只能用O(N)的复杂度解决。本题类似于最大连续和问题,事先计算区间[0,i)的最大值,存放到_max数组中,然后扫描整个数组,不断用max(ans,_max[i]-a[i])更新最大差值即可。本题附上利用O(1)更新MaxAi来计算最大值的程序。更新顺序值得学习!
3.代码:
参考程序:
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+10 int a ; int _max ; 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 100000 int a , 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; }
相关文章推荐
- 第一章例题18开放式学分制UVa11078
- uva11078 - Open Credit System(开放式学分制)
- UVA11078开放式学分制(前面-后面的最大值)
- uva 11078 开放式学分制 便于理解下尺取法以及动态的思想吧
- UVa 11078 - Open Credit System(开放式学分制)
- 水题,高效,优化(开放式学分制,uva 11078)
- UVa 11078 - Open Credit System(开放式学分制)
- 指南第一章 例题18 UVA 11078 Open Credit System(扫描,维护最大值)
- uva 11078 - Open Credit System(水题)
- UVa #11400 Lighting System Design (例题9-6)
- 【例题5-8 UVA - 400】Unix ls
- UVa 401 Palindromes(例题3-3)
- 例题5-10 UVA 207 PGA Tour Prize Money PGA巡回赛的奖金
- UVA - 11078 Open Credit System 推理
- 快速幂取模 例题uva10006
- 【例题 6-13 UVA - 1103】Ancient Messages
- 【例题 6-15 UVA - 10129】Play on Words
- 例题6-9 UVa839 Not so Mobile(树)
- 例题10-1 巨大的斐波拉契数 Uva 11582
- 例题8-11 全部相加(Add All, UVa 10954)