NC220346. B找山坡
描述
计算:
输入描述
第一行一个整数n,第二行n个整数
输出描述
输出题目所求的值
示例1
输入:
5 1 2 3 2 1
输出:
4
说明:
当L=1,R=5时,满足题目条件的最优解,答案为R-L=5-1=4Python3 解法, 执行用时: 1586ms, 内存消耗: 127248K, 提交时间: 2022-04-08 18:35:53
n = int(input()) a = [0 for i in range(n)] s = input().split() for i in range(n): a[i] = int(s[i]) b = [] ans = 0 for i in range(n): while len(b) > 0 and a[b[-1]] > a[i] : b.pop() if len(b) > 0 and a[b[-1]] == a[i] : ans = max(ans, i - b[-1]) else: b.append(i) print(ans)
C++(clang++11) 解法, 执行用时: 342ms, 内存消耗: 7580K, 提交时间: 2021-04-01 12:52:42
#include<bits/stdc++.h> using namespace std; int top=0,a[1000003],t[1000003],ans=0; int main(){ int n; cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=n;i++){ while(top!=0&&a[i]<a[t[top]])top--; if(top!=0&&a[t[top]]==a[i]) ans=max(ans,i-t[top]); else t[++top]=i; } cout<<ans; }