题解 CF580A 【Kefa and First Steps】

Mr_WA

2019-10-16 17:45:21

Solution

# 本~~大佬~~蒟蒻又来写题解啦! 这道题要求一个序列中的最长不下降子段的长度,所以当我们找到一个数小于前面一个数的时候,就取最大的长度即可。 然后我们看一下数据范围:1<=n<=10的5次方(即100000) 为了保险起见,我们还是用scanf吧…… 我直接用一个for完成了~~(因为懒得打那么多……)~~ ## 话不多说,直接上代码! ``` #include<iostream> #include<cstdio>//scanf需要用到 #include<cmath>//max需要用到 using namespace std; int n,a,t,g=1,d;//我们待会儿要从第二个数枚起,g开始定为1,t用来存储a int main() { scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&a); if(i>1)//如果已经输入了第2个数,就进行判断 { if(a<t)d=max(g,d),g=1;//若a小于上一个数t,用d存储最大值,而现在的a已经属于另一个子串,所以g应该赋值1 else g++; } t=a;//t储存为a,以进行后面的比较 } cout<<max(d,g);//最后d可能为0,输出最大值 return 0; } ```