题目描述
Dada无聊时,喜欢做一个游戏,将很多钱分成若干堆排成一列,每堆钱数不固定,谁能找出每堆钱数严格递增的最长区间,谁就是人生赢家了。Dada可能脑子里的水还没干,她找不出来,你来帮她找找吧。
输入
多组输入,至文件结尾。
对于每组数据:
第一行包含一个正整数n(1<=n<=100000),一共有n堆钱。
第二行输入n个正整数a1,a2,...,an (1<=ai<=1000000000),代表每一堆的钱数
大量输入,请使用scanf。
输出
打印严格递增的最长区间的长度
样例输入
5
1 7 2 11 15
6
100 100 100 100 100 100
3
1 2 3
样例输出
3
1
3
题解:遍历整个区间当后一个比前一个大的话就让一个计数器++;当后一个比前一个小的时候,把计数器的值和最大值进行
比较并且把计数器置为1,再向后面遍历(PS:因为要连续的所以既然后一个比前一个小,当然就直接从当前去找就好了,
回去的话肯定没有有现在最大值的大,所以把i置为j的值)
1 #include <iostream> 2 #include <algorithm> 3 #include <cstring> 4 #include <cstdio> 5 #include <vector> 6 #include <cstdlib> 7 #include <iomanip> 8 #include <cmath> 9 #include <ctime> 10 #include <map> 11 #include <set> 12 #include <queue> 13 using namespace std; 14 #define lowbit(x) (x&(-x)) 15 #define max(x,y) (x>y?x:y) 16 #define min(x,y) (x<y?x:y) 17 #define MAX 100000000000000000 18 #define MOD 1000000007 19 #define pi acos(-1.0) 20 #define ei exp(1) 21 #define PI 3.141592653589793238462 22 #define INF 0x3f3f3f3f3f 23 #define mem(a) (memset(a,0,sizeof(a))) 24 typedef long long ll; 25 ll gcd(ll a,ll b){ 26 return b?gcd(b,a%b):a; 27 } 28 bool cmp(int x,int y) 29 { 30 return x>y; 31 } 32 const int N=100010; 33 const int mod=1e9+7; 34 35 int main() 36 { 37 int n,a[N]; 38 while(scanf("%d",&n)!=EOF){ 39 for(int i=0;i<n;i++) 40 scanf("%d",&a[i]); 41 int maxx=0,i,j; 42 for(i=0;i<n-maxx;){ 43 int temp=1; 44 for(j=i+1;j<n;j++){ 45 if(a[j]>a[j-1]) temp++; 46 else break; 47 } 48 if(temp>maxx) maxx=temp; 49 i=j; 50 } 51 printf("%d ",maxx); 52 } 53 return 0; 54 }