Root :: AOAPC I: Beginning Algorithm Contests -- Training Guide (Rujia Liu) :: Chapter 1. Algorithm Design :: Designing Efficient Algorithms :: Examples
/*
题意:n个整数a1~an-1 找到两个数ai aj 使ai-aj尽可能大(i<j)
直接的想法 找到每组(ai,aj)数对 max比较找到dmax
时间是n^2 超时(M=100000+10)
思路:单位时间维护最大值,该题不用输入都结束再处理数据(时间从n降到l)
可以边输入边比较维护。
输出要求打印距离即可,当要求输出i和j时
要记得在max函数更新最大值时候记录i和j
*///Uva 11078 Open Credit System
//AC
1 //AC 3 #include<stdio.h> 4 #include<algorithm> 5 using namespace std; 6 const int M=100000+10; 7 int t; 8 int a[M]; 9 int main() 10 { 11 int i,j,k,n; 12 int ai,dmax; 13 scanf("%d",&t); 14 while(t--) 15 { 16 scanf("%d",&n); 17 scanf("%d%d",&a[0],&a[1]); 18 dmax=a[0]-a[1]; 19 ai=a[0]; 20 for(i=1;i<n;i++) 21 { 22 if(i<2) 23 { 24 dmax=max(dmax,ai-a[1]);//单位时间维护距离最大值dmax 25 ai=max(ai,a[1]);//不断更新ai 使ai尽可能大,为使ai-aj尽可能大 26 } 27 else 28 { 29 scanf("%d",&a[i]); 30 dmax=max(dmax,ai-a[i]); 31 ai=max(ai,a[i]); 32 } 33 } 34 printf("%d\n",dmax); 35 } 36 return 0; 37 } 38 /* 39 5 40 6 41 1 2 3 4 78 6 42 */ 43 44