Uva 11078 Open Credit System

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  
原文地址:https://www.cnblogs.com/someonelikeyou/p/2971373.html