列表

详情


NC219641. 天使果冻

描述

Angelic Jelly
个果冻排成一排。第 个果冻的美味度是 a_i
天使非常喜欢吃果冻,但她想把最好吃的果冻留到最后收藏。天使想知道前 个果冻中,美味度第二大的果冻有多少美味度?
一共有 次询问。
注:如果最大的数有两个以上,默认第二大的等于最大的。例如, 这个序列,第二大的数是4。

输入描述

第一行一个正整数
第二行 个正整数 a_i,用空格隔开。
第三行一个正整数
接下来的 行,每行一个正整数 ,代表一次询问。
数据范围:1≤q≤1e5,1≤ai≤1e9,2≤x≤n≤1e5

输出描述

输出 行,每行一个正整数,代表一次询问,输出前个果冻中美味度第二大的值。

示例1

输入:

5
1 2 5 3 5
4
2
3
4
5

输出:

1
2
3
5

说明:

前2个数,第二大的是1。
前3个数,第二大的是2。
前4个数,第二大的是3。
前5个数,第二大的是5。

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(clang++11) 解法, 执行用时: 188ms, 内存消耗: 3192K, 提交时间: 2021-03-24 19:16:40

#include<iostream>
using namespace std;

const int N=1e5;

int ans[N];

int main(){
    int n,a=0,b=0,t;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>t;
        if(t>a)b=a,a=t;
        else if(t>b)b=t;
        ans[i]=b;
    }
    int q;
    cin>>q;
    while(q--){
        cin>>t;
        cout<<ans[t]<<endl;
    }

    return 0;
}

Python3(3.9) 解法, 执行用时: 703ms, 内存消耗: 16056K, 提交时间: 2021-04-11 15:22:01

n=int(input())
a=list(map(int,input().split()))
ans=[0 for _ in a]
ma1=a[0]
ma2=0
for i,v in enumerate(a[1:],start=1):
    if v>ma1:
        ma1,ma2=v,ma1
    elif v>ma2:
        ma2=v
    ans[i]=ma2
    
for _ in range(int(input())):
    x=int(input())
    print(ans[x-1])
    

上一题