mcbbnb 2023-08-12 18:09 采纳率: 85.7%
浏览 3
已结题

c++找区间次大值问题!

时间限制:C/C++ 1000MS,其他语言 2000MS
内存限制:C/C++ 256MB,其他语言 512MB
出题人:
描述
给定一个长度为 n 的整数序列 a 1 ,a 2 ,…,a n ,请回答 q 次询问。对于每次询问,请找出区间 [l,r] 中的严格次大值。如果区间 [l,r] 中不存在严格次大值,输出 −1a l,…,a r中最大的数为 m,那么区间 [l,r] 中的严格次大值定义为 a l ,…,a r中比 m 小的数中最大的一个

输入描述

第一行两个整数 n,q,表示序列的长度和询问的次数
第二行 n 个整数 a 1 ,a 2 ,…,a n,表示序列中的数
接下来 q 行,每行两个整数 l i ,r i,表示每次询问的区间的左右端点

输出描述

输出 q 行,每行一个整数,表示每次询问的答案
用例输入 1 
10 3
5 5 4 4 3 3 2 2 1 1
1 10
5 6
3 5
用例输出 1 
4
-1
3
提示

对于 100% 的测试数据,3≤n≤1000,1q1000,1a 
i1000000,1≤l i≤r i ≤n
  • 写回答

2条回答 默认 最新

  • 不良使 Python领域潜力新星 2023-08-12 18:36
    关注
    
    #include <iostream>
    #include <vector>
    using namespace std;
    
    int findSecondMax(vector<int>& nums, int l, int r) {
        int maxVal = nums[l];
        int secondMaxVal = -1;
        
        for (int i = l+1; i <= r; i++) {
            if (nums[i] > maxVal) {
                secondMaxVal = maxVal;
                maxVal = nums[i];
            } else if (nums[i] < maxVal) {
                secondMaxVal = max(secondMaxVal, nums[i]);
            }
        }
        
        return secondMaxVal;
    }
    
    int main() {
        int n, q;
        cin >> n >> q;
        vector<int> nums(n);
        
        for (int i = 0; i < n; i++) {
            cin >> nums[i];
        }
        
        while (q--) {
            int l, r;
            cin >> l >> r;
            
            int result = findSecondMax(nums, l-1, r-1);
            cout << result << endl;
        }
        
        return 0;
    }
    

    这是一个demo,看看有没有帮助的

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 8月20日
  • 已采纳回答 8月12日
  • 创建了问题 8月12日

悬赏问题

  • ¥100 用数字代替ip主机号断与旋转链接号段
  • ¥20 学校内手机热点不能使用
  • ¥15 qwen模型微调训练时grad_norm为0.0或为nan
  • ¥15 若依- Spring cloud-plus集成阿里云schedulerX再控制台应用管理找不到实例
  • ¥15 用vs2022 fortran调试只无法查看数组的值,显示发生未指定的错误
  • ¥50 SGD Gateway 是否可以与 SGD Server 装在一台服务器上?
  • ¥15 gge梦幻西游的地图制作
  • ¥15 对计算机的学习没有方向
  • ¥15 用VBA抓取淘宝的发票号码和下载发票pdf遇到的问题
  • ¥20 java excel导出有什么解决方案