水题,高效,优化(开放式学分制,uva 11078)
2016-10-24 21:56
211 查看
就是本来是O(n^2),然后从后往前枚举,顺便维护后面的最小值,就可以优化成O(n)。
然后自己写了一下输入输出还是快了一点的= =。20ms/50ms。
一开始输入没考虑负数,All these integers haveabsolute values less than 150000.理解成了全是整数,事实上意思是绝对值小于150000.
改了就过了。
这种优化思路很常见,以前做题遇到过很多,不过都只是题中的一小部分,而且维护和计算的情况更为复杂,这也算是模板了吧。
代码
#include<bits/stdc++.h>
#define maxn 100010
#define INF 0X3F3F3F3F
using namespace std;
int n;
int a[maxn];
inline void readint(int* p)
{
char c=getchar();
while(!(isdigit(c)||c=='-')) c=getchar();
*p=0;
bool fu;
if(c=='-')
{
fu=true;
c=getchar();
}
else fu=false;
while(isdigit(c))
{
*p=*p*10+c-'0';
c=getchar();
}
if(fu) *p=-*p;
}
int buf[10];
inline void writeint(int& x)
{
bool fu;
if(x<0)
{
x=-x;
fu=true;
}
else fu=false;
int p=0;
if(x==0) buf[p++]=0;
else
{
while(x)
{
buf[p++]=x%10;
x/=10;
}
}
if(fu) putchar('-');
for(int i=p-1;i>=0;i--)
putchar('0'+buf[i]);
putchar('\n');
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
readint(a+i);
int MIN=a
;
int MAX=-INF;
for(int i=n-1;i>=1;i--)
{
MAX=max(MAX,a[i]-MIN);
MIN=min(MIN,a[i]);
}
writeint(MAX);
}
return 0;
}
然后自己写了一下输入输出还是快了一点的= =。20ms/50ms。
一开始输入没考虑负数,All these integers haveabsolute values less than 150000.理解成了全是整数,事实上意思是绝对值小于150000.
改了就过了。
这种优化思路很常见,以前做题遇到过很多,不过都只是题中的一小部分,而且维护和计算的情况更为复杂,这也算是模板了吧。
代码
#include<bits/stdc++.h>
#define maxn 100010
#define INF 0X3F3F3F3F
using namespace std;
int n;
int a[maxn];
inline void readint(int* p)
{
char c=getchar();
while(!(isdigit(c)||c=='-')) c=getchar();
*p=0;
bool fu;
if(c=='-')
{
fu=true;
c=getchar();
}
else fu=false;
while(isdigit(c))
{
*p=*p*10+c-'0';
c=getchar();
}
if(fu) *p=-*p;
}
int buf[10];
inline void writeint(int& x)
{
bool fu;
if(x<0)
{
x=-x;
fu=true;
}
else fu=false;
int p=0;
if(x==0) buf[p++]=0;
else
{
while(x)
{
buf[p++]=x%10;
x/=10;
}
}
if(fu) putchar('-');
for(int i=p-1;i>=0;i--)
putchar('0'+buf[i]);
putchar('\n');
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
readint(a+i);
int MIN=a
;
int MAX=-INF;
for(int i=n-1;i>=1;i--)
{
MAX=max(MAX,a[i]-MIN);
MIN=min(MIN,a[i]);
}
writeint(MAX);
}
return 0;
}
相关文章推荐
- 第一章例题18开放式学分制UVa11078
- UVA11078开放式学分制(前面-后面的最大值)
- uva11078 - Open Credit System(开放式学分制)
- UVa 11078 - Open Credit System(开放式学分制)
- 例题1.18 开放式学分制 UVa11078
- 水题,优化,高效(年龄排序,uva 11462)
- UVa 11078 - Open Credit System(开放式学分制)
- uva 11078 开放式学分制 便于理解下尺取法以及动态的思想吧
- UVA-11078(水题)
- uva725_一道水题(优化到了29ms)
- UVA 11078 Open Credit System (水题)
- UVA 11078 Open Credit System(空间优化+时间优化)
- UVA - 11078 - Open Credit System (高效算法的应用!!)
- Open Credit System - UVa 11078 水题
- uva 11078 - Open Credit System(水题)
- UVA 1481 Genome Evolution(高效算法优化)
- UVa 11248 网络扩容(最大流(需要优化))
- UVA - 11059(暴力水题)
- Android数据适配器(Adapter)优化:使用高效的ViewHolder
- UVa468 - Key to Success(水题)