NC231161. Antinomy与法术威力
描述
一天Antinomy正在练习魔法,他将个魔法咒语排成一排,每个咒语都拥有一个威力值
一个魔法是一串非空连续的魔法咒语构成,一个魔法的施法时间就是咒语的数量,一个魔法的威力就是该魔法中咒语的最小威力值
Antinomy很好奇,对于相同的施法时间,魔法的最大威力是多少,从开始输出
输入描述
第一行一个整数--一共有个魔法咒语。
第二行n个整数,其中是个咒语的威力值。
输出描述
在一行中输出个整数。从到,输出相同施法时间的魔法最大威力值
示例1
输入:
5 3 7 7 2 4
输出:
7 7 3 2 2
说明:
C++ 解法, 执行用时: 64ms, 内存消耗: 2552K, 提交时间: 2022-03-26 16:54:57
#include<bits/stdc++.h> using namespace std; const int N=200000+5; int n,a[N],dp[N]; int main() { cin>>n; for(int i=1;i<=n;i++){ scanf("%d",&a[i]); } memset(dp,0,sizeof(dp)); for(int i=1;i<=n;i++){ int l=i,r=i; while(l>=1&&a[l]>=a[i]) l--; while(r<=n&&a[r]>=a[i]) r++; int w=r-l-1; dp[w]=max(dp[w],a[i]); } for(int i=n;i>=1;i--){ if(dp[i]<dp[i+1]) dp[i]=dp[i+1]; } for(int i=1;i<=n;i++) cout<<dp[i]<<" "; return 0; }