当前位置: 首页 > news >正文

蓝桥杯 区间排序

题目描述

小杨有一个包含 n 个正整数的序列 a。

小杨计划对序列进行多次升序排序,每次升序排序小杨会选择一个区间 [l,r](l≤r)并对区间内所有数字,即进行升序 al​,al+1​,…ar​ 排序。每次升序排序会在上一次升序排序的结果上进行。

小杨想请你计算出多次升序排序后的序列。

输入格式

第一行包含一个正整数 n,含义如题面所示。
第二行包含 n 个正整数 a1​,a2​,…an​,代表序列 a。
第三行包含一个正整数 q,代表排序次数。
之后 q 行,每行包含两个正整数 l,r,代表将区间 [li​,ri​] 内所有数字进行升序排序。

输出格式

输出一行包含 n 个正整数,代表多次升序排序后的序列。

输入输出样例

输入 #1复制

5
3 4 5 2 1
3
4 5
3 4
1 3

输出 #1复制

1 3 4 5 2

说明/提示

样例 1 解释

  • 第一次升序排序后,序列为 [3,4,5,1,2];
  • 第二次升序排序后,序列为 [3,4,1,5,2];
  • 第三次升序排序后,序列为 [1,3,4,5,2];

数据规模与约定

对于全部的测试数据,保证 1≤n,ai​,q≤100,1≤li​≤ri​≤n。

注意点: 

C++中,sort函数的第二个参数(即结束迭代器)指向的是​​排序区间的末尾的下一个位置​​(即“尾后迭代器”)。因此,为了正确地对区间 [l, r] 进行排序,我们需要将 r 加1,使得 a.begin() + r + 1 指向区间 [l, r] 的最后一个元素的下一个位置。

详细解释

  1. sort函数的参数​​:

    • sort(first, last) 会对区间 [first, last) 进行排序,即包括 first,但不包括 last
    • 因此,如果我们想要排序 [l, r](包括 l 和 r),last 应该指向 r + 1
  2. ​示例​​:

    • 假设 a = {3, 4, 5, 2, 1}l = 3r = 4(1-based索引)。
    • 转换为0-based索引后,l = 2r = 3
    • 要排序 a[2] 和 a[3](即 5 和 2),sort(a.begin() + 2, a.begin() + 4) 会对 [a[2], a[3]] 进行排序。
    • 如果不加1,sort(a.begin() + 2, a.begin() + 3) 只会排序 a[2](即 5),而不会包括 a[3](即 2)。
  3. ​数学表示​​:

    • [l, r] 包含 r - l + 1 个元素。
    • sort(a.begin() + l, a.begin() + r + 1) 会正确排序这 r - l + 1 个元素。

关键点

  • sort的区间是左闭右开的​​:[first, last)
  • r + 1 是为了包含 r​:确保 last 指向区间 [l, r] 的最后一个元素的下一个位置。
  • sort 的参数​​:

    • 原代码:sort(a.begin() + l, a.begin() + r + 1);(错误,因为 a 不是 vector
    • 修正后:sort(a + l, a + r + 1);(正确,a 是数组,直接用指针操作)
  • ​输出格式​​:

    • 原代码:cout << a[i]<<" ";(多了一个空格)
    • 修正后:cout << a[i] << " ";(规范写法)

 代码:

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

int main() {
    int n;
    cin >> n;
    vector<int> a(n);
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }

    int q;
    cin >> q;
    while (q--) {
        int l, r;
        cin >> l >> r;
        // 转换为0-based索引
        l--;
        r--;
        // 对区间 [l, r] 进行升序排序
        sort(a.begin() + l, a.begin() + r + 1);
    }

    // 输出结果
    for (int i = 0; i < n; i++) {
//        if (i != 0) cout << " ";
        cout << a[i]<<" ";
    }
    cout << endl;

    return 0;
}

相关文章:

  • git操作0409
  • ruby self
  • 探索 Shell 中的扩展通配符:从 Bash 到 Zsh
  • ​​AMS行政管理系统:数字化赋能人力资源精益管理​
  • LeetCode 252 会议室题全解析:Swift 实现 + 场景还原
  • Cherry Studio配置MCP server
  • 记录学习的第二十四天
  • 用一个实际例子快速理解MCP应用的工作步骤
  • C++学习之服务器EPOLL模型、处理客户端请求、向客户端回复数、向客户端发送文件
  • Java蓝桥杯习题一:for循环和字符串的应用
  • Windchill开发-WTContainer相关API整理
  • 【项目实训项目博客】prompt初版实践
  • 流浪动物管理系统设计与实现(代码+数据库+LW)
  • 《系统分析师-案例实践篇-16-22章总结》
  • 图灵逆向——题七-千山鸟飞绝
  • 封装方法的辨析
  • MuMu 模拟器过检测技术全解析
  • 牛客 小苯的Z串匹配
  • 隐性需求未识别,项目后期如何补救
  • 这是专业翻译的生产力工具
  • 平顶山哪里做网站/怎样做百度推广
  • 海外独立站平台/企业门户网站的设计与实现
  • 关于建设殡葬网站的报告范文/营销型网站建设总结
  • 布吉做棋牌网站建设哪家服务好/重庆企业免费建站
  • 怎么下载网站所有源码/百度广告点击软件
  • 网站建设分组任务/员工培训课程