A - Jumping Buildings Gym - 102302A

Bob is developing a new game called jumping Lario. In this game the main protagonist, Lario, has to jump on top of buildings until he reaches the end of the level. The level is composed of N buildings of possibly different heights. The building where Lario starts is chosen randomly at the beginning of the game.

Bob started to write the code for his game but then realized that he didn't know how to implement the jumps mechanics. The thing is, if Lario is currently on top of building X and the height of this building is h, then Lario should be able to reach building min(X + h, n) in one jump. Unless, of course, there's a taller building somewhere on the path from building X to building X + h, then in this case, Lario would face smash the taller building on the path and end up landing right before it.

For example, in the image bellow, if Lario had started on the first building (of height 5), with one jump he should be able to reach building six. But on the path from building one to building six, he would end up hitting building five that has height 6. When doing so, he would land on building four (the one with height 3).

Given the heights for all the N buildings, your task is to figure out for every possible start position of Lario, how far he would be able to go with just one jump.

Input

The first line of the input contains a single integer N (1 ≤ N ≤ 105), indicating the number of buildings.

The second line of the input contains N integers h1, h2... hN (1 ≤ hi ≤ 105), indicating the height of each building.

Output

Output N integers. The i-th integer indicating the farthest building that Lario can reach with one jump if he starts on top of the i-th building.

#include <bits/stdc++.h>
using namespace std;

int main()
{
    int n;
    cin>>n;
    int b[100010],i;
    for(i=1; i<=n; i++)
        cin>>b[i];
    int j;
    for(i=1; i<=n; i++)
    {
        for(j=i+1; j<=n; j++)
        {
            if(b[j]>b[i])
                break;
        }
        if(i==1)
            cout<<min(j-i-1,b[i]);
        else
            cout<<" "<<min(j-i-1,b[i]);
    }
    return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值