UVA 11078 Open Credit System (水题)
2013-08-09 16:36
405 查看
题意:给一个长度为n的序列A0,A1...An-1,找出两个整数Ai和Aj(i<j),使得Ai-Aj尽量大。
思路:O(n^2)算法显然TLE,因此对于每个数Ai,其实只要减去Ai+1到An-1中的最小值即可,倒着扫并用一个minval去维护Ai+1到An-1中的最小值,用Ai减去当前的minval就是Ai作为第一个数来减去第二个数所能得到的最优解。输出所有的最大值即可。
完全是一道水题。。拿来测试刚学会的输入输出优化。。writeint和readint就是优化读入用的。
思路:O(n^2)算法显然TLE,因此对于每个数Ai,其实只要减去Ai+1到An-1中的最小值即可,倒着扫并用一个minval去维护Ai+1到An-1中的最小值,用Ai减去当前的minval就是Ai作为第一个数来减去第二个数所能得到的最优解。输出所有的最大值即可。
完全是一道水题。。拿来测试刚学会的输入输出优化。。writeint和readint就是优化读入用的。
#include<cstdio> #include<cctype> #include<iostream> #define MAXN 100005 #define INF 0x3f3f3f3f using namespace std; int n,buf[20],A[MAXN],T; inline int readint() { char c=getchar(); bool flag=1; while(!isdigit(c)) {if(c=='-') flag=0;c=getchar();} int x=0; while(isdigit(c)) { x=x*10+c-'0'; c=getchar(); } if(!flag) x*=-1; return x; } inline void writeint(int i) { int p=0; if(i<0) {putchar('-');i*=-1;} if(!i) ++p; else while(i) { buf[p++]=i%10; i/=10; } for(int j=p-1;j>=0;--j) putchar('0'+buf[j]); } int main() { T=readint(); while(T--) { n=readint(); for(int i=0;i<n;++i) A[i]=readint(); int minval=A[n-1],ans=-INF; for(int i=n-2;i>=0;--i) { ans=max(ans,A[i]-minval); minval=min(minval,A[i]); } writeint(ans); putchar('\n'); } return 0; }
相关文章推荐
- Open Credit System - UVa 11078 水题
- uva 11078 - Open Credit System(水题)
- uva 11078 Open Credit System
- UVA 11078 Open Credit System
- UVa 11078 - Open Credit System
- UVA 11078 - Open Credit System
- UVA 11078 - Open Credit System(单调队列)
- UVA - 11078 Open Credit System(维护最小值)
- UVA 11078 Open Credit System(扫描 维护最大值)
- uva 11078 Open Credit System
- UVa 11078 Open Credit System
- 指南第一章 例题18 UVA 11078 Open Credit System(扫描,维护最大值)
- uva11078 Open Credit System
- Open Credit System UVa 11078
- UVa11078 - Open Credit System
- UVA 11078(p41)----Open Credit System
- UVa 11078 Open Credit System (序列前后最大差)
- Open Credit System(UVA11078)
- UVa 11078 - Open Credit System
- UVa11078 - Open Credit System