指南第一章 例题18 UVA 11078 Open Credit System(扫描,维护最大值)

来源:互联网 发布:淘宝店铺网红 编辑:程序博客网 时间:2024/05/22 13:06

题目链接:http://7xjob4.com1.z0.glb.clouddn.com/b4ea9368799f989c139c1843a4b5bcdf

中文题意:给一个长度为n的整数序列A0,A1,…….An-1,找出两个整数Ai和Aj(i< j),使得Ai-Aj尽量大。

【输入格式】
输入第一行为数据组数T(T<=20)。每组数据的第一行为整数的个数n(2<=n<=100000);
以下n行,每行为一个绝对值不超过150000的整数。
【输出格式】
对于每组数据,输出Ai-Aj的最大值。
下面是AC代码:

#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int a[100005];int main(){    int t,n;    scanf("%d",&t);    while(t--)    {        scanf("%d",&n);        int num;        for(int i=0;i<n;i++)        {            scanf("%d",&a[i]);        }        int ans=a[0]-a[1];        int maxn=a[0];//maxn动态维护数组中的最大值        for(int i=1;i<n;i++)        {            ans=max(ans,maxn-a[i]);            maxn=max(maxn,a[i]);//maxn 要比ans更新的晚,至于为什么,就是为了i<j        }        printf("%d\n",ans);    }    return 0;}
0 0
原创粉丝点击