sincerit 签到题

链接:https://ac.nowcoder.com/acm/contest/318/B
来源:牛客网

题目描述
IG牛逼!!!

众所周知,IG是英雄联盟S8世界总决赛冠军,夺冠之夜,数亿人为之欢呼!

赛后某百分百胜率退役ADC选手的某表情包意外走红,某苟会长看到此表情包也想模仿。

于是有n个友爱的萌新决定每人都送会长一根长为ai面包。(数据保证没有面包的长度相等)

会长无聊时把面包摆成一排,他惊人地发现他喜欢这样一类区间,区间[i, j]满足条件:

区间里的面包没有比左端点i号面包短的,同时也没有比右端点j号面包长的。
在这里插入图片描述
Gey会长在思考这样一个问题:

所有满足条件的区间中j-i的最大值是多少?

输入描述:
t组数据。
每组样例第一行输入整数n,接下来一行输入n个正整数。
(t≤30, n≤1000, ai≤1000000)
输出描述:
输出满足条件的区间中j-i的最大值。
示例1
输入
复制
2
4
5 4 3 6
4
6 5 4 3
输出
复制
1
0

思路: 先枚举区间的左端点,然
后遍历后面的数据,同时记录一个最大值,如果当前这个数比前面记录的最大值要大则
更新答案;若出现小于左端点的数则break。就没了

考虑错了以为要是单调递增的序列才可以

#include <stdio.h>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int num[1005]; 
int main() {
  int t;
  scanf("%d", &t);
  while (t--) {
    int n;
    scanf("%d", &n);
    for (int i = 0; i < n; i++) scanf("%d", &num[i]);
    int i, j, mx = 0, t;
    for (i = 0; i < n; i++) {
      t = i; // 表示最大位置的下标
      for (j = i+1; j < n; j++) {
        if (num[j] >= num[t]) t = j;
        else if(num[j] < num[i]) break;
      }
      if (t - i > mx) mx = t - i;
    }
    printf("%d\n", mx);
  }
  return 0;
}

猜你喜欢

转载自blog.csdn.net/sincerit/article/details/85227844
今日推荐