链接:https://ac.nowcoder.com/acm/contest/558/E
来源:牛客网
小猫在研究序列。
小猫在研究单调性。
给定一个长度为N的序列a1,a2,…,aN,请你选出一个最长的区间[l,r](1≤l≤r≤N),满足al≤al+1≤…≤ar。
如果有多个,请输出l最小的。
输入描述:
第一行一个正整数T,表示数据组数。 每组数据的第一行一个正整数N。 接下来一行N个正整数a1,a2,…,aN。
输出描述:
T行,每行两个正整数l,r,表示选出的区间。
示例1
输入
复制
4 5 1 2 3 4 5 5 5 4 3 2 1 5 5 3 4 1 2 5 3 4 5 1 2
输出
复制
1 5 1 1 2 3 1 3
备注:
1≤T,N,ai≤1000
思路:求解最长非递减区间,非常简单的方法就是在输入数组的过程中动态比较、记录区间左端点 l 和 区间长度 res
代码:
#include<bits/stdc++.h>
using namespace std;
int a[1005];
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
int l=1,mid=1,sum=0,res=0;
for(int i=1;i<=n;i++)
{
cin>>a[i];
if(a[i]>=a[i-1])
{
sum++;
if(sum>res)
{
res=sum;
l=mid;
}
}
else
{
mid=i;
sum=1;
}
}
cout<<l<<" "<<l+res-1<<endl;
}
return 0;
}