每日一题:订单编号

2023-10-31

订单编号 - 题目 - Daimayuan Online Judge

一开始想用二分答案的,但是后来发现不行,二分答案每找到一个值,就要去掉它的左半边或右半边,但是这里不能去 

 错误代码:

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N = 1e7;
int a[N];
int n;
bool flag[N];
int main()
{
    cin >> n;
    for (int i = 1; i <= n; i++) cin >> a[i];
    int max1 = a[1];
    for (int i = 1; i <= n; i++) {
        int l = a[i], r = max1 + 1;
        while (l < r) {
            int mid = (l + r) / 2;
            if (!flag[mid]) r = mid;
            else l = mid + 1;
        }
        flag[l] = true;
        a[i] = l;
        max1 = max(max1, l);
    }
    for (int i = 1; i <= n; i++) cout << a[i]<<" ";
    return 0;
}

 该题可以用set容器,用pair表示区间,将区间插入set表示该区间里的数是没有用过的,而当哪一个数用过后,就将该数从set中删去,具体删去数的做法是将原有区间删去,插入新的区间来使该数不在新的区间中

 分块解释代码:

inline void insert(int l, int r) {
    if (l > r) return;
    s.insert(make_pair(r, l));
}

 这样一来,区间是按照右端点从小到大排序的

auto it = s.lower_bound(make_pair(x, 0));

 AC代码(用cin,cout会超时):

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<set>
using namespace std;
set<pair<int,int>>s;
int n;
inline void insert(int l, int r) {
    if (l > r) return;
    s.insert(make_pair(r, l));
}
int main()
{
    scanf("%d", &n);
    s.insert(make_pair(2e9, 1));//一开始区间是1到2e9,表示这些数都没用过
    for (int i = 1; i <= n; i++) {
        int x;
        scanf("%d", &x);
        auto it = s.lower_bound(make_pair(x, 0));//找到右端点大于等于x的最近的一个区间
        int l = it->second,r = it->first;
        //x在区间中,那么编号x还未用过,就用原来的编号x
        if (l <= x) {
            printf("%d ", x);
            insert(l, x - 1);
            insert(x + 1, r);
            s.erase(it);
        }
        //x不在区间中,编号x已经用过了,得找大于等于x的且没用过的编号,即离它最近的下一个区间的左端点l
        else {
            printf("%d ", l);
            insert(l + 1, r);
            s.erase(it);
        }
    }
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

每日一题:订单编号 的相关文章

  • 在 Vulkan 中,图形队列系列与当前队列系列分离是否有益?

    据我所知 队列系列可能支持呈现到屏幕但不支持图形 假设我有一个同时支持图形和呈现的队列系列 以及另一个仅支持呈现的队列系列 我应该为两个进程使用第一个队列系列 还是应该将第一个队列系列委托给图形 将后者委托给呈现 或者这两种方法之间没有明显
  • 如何使用 openSSL 函数验证 PEM 证书的密钥长度

    如何验证以这种方式生成的 PEM 证书的密钥长度 openssl genrsa des3 out server key 1024 openssl req new key server key out server csr cp server
  • 在 C 语言中,为什么数组的地址等于它的值?

    在下面的代码中 指针值和指针地址与预期不同 但数组值和地址则不然 怎么会这样 Output my array 0022FF00 my array 0022FF00 pointer to array 0022FF00 pointer to a
  • 使用 C# 和 ASP.NET 在电子邮件附件中发送 SQL 报告

    我正在尝试使用 ASP NET 和 C 从 sql reportserver 2008 作为电子邮件附件发送报告 到目前为止我学会了如何获取 PDF 格式的报告 http weblogs asp net srkirkland archive
  • 混合模型优先和代码优先

    我们使用模型优先方法创建了一个 Web 应用程序 一名新开发人员进入该项目 并使用代码优先方法 使用数据库文件 创建了一个新的自定义模型 这 这是代码第一个数据库上下文 namespace WVITDB DAL public class D
  • Makefile 和 .Mak 文件 + CodeBlocks 和 VStudio

    我对整个 makefile 概念有点陌生 所以我对此有一些疑问 我正在 Linux 中使用 CodeBlocks 创建一个项目 我使用一个名为 cbp2mak 的工具从 CodeBlocks 项目创建一个 make 文件 如果有人知道更好的
  • if constexpr 中的 not-constexpr 变量 – clang 与 GCC

    struct A constexpr operator bool const return true int main auto f auto v if constexpr v A a f a clang 6 接受该代码 GCC 8 拒绝它
  • 来自嵌入图像的 BitmapSource

    我的目标是在 WPF 窗口上重写 OnRender 方法中绘制图像 someImage png 它是嵌入资源 protected override void OnRender System Windows Media DrawingCont
  • 保证复制省略是否适用于函数参数?

    如果我理解正确的话 从 C 17 开始 这段代码现在要求不进行任何复制 Foo myfunc void return Foo auto foo myfunc no copy 函数参数也是如此吗 下面的代码中的副本会被优化掉吗 Foo myf
  • LinkLabel 无下划线 - Compact Framework

    我正在使用 Microsoft Compact Framework 开发 Windows CE 应用程序 我必须使用 LinkLabel 它必须是白色且没有下划线 因此 在设计器中 我将字体颜色修改为白色 并在字体对话框中取消选中 下划线
  • C# 获取数据表中所有重复行的计数

    我通过运行存储过程来填充数据集 并且从数据集中填充数据表 DataSet RawDataSet DataAccessHelper RunProcedure storedprocedureName this will just return
  • Unity c# 四元数:将 y 轴与 z 轴交换

    我需要旋转一个对象以相对于现实世界进行精确旋转 因此调用Input gyro attitude返回表示设备位置的四元数 另一方面 这迫使我根据这个四元数作为默认旋转来计算每个旋转 将某些对象设置为朝上的简单方法如下 Vector3 up I
  • 让网络摄像头在 OpenCV 中工作

    我正在尝试让我的网络摄像头在 Windows 7 64 位中的 OpenCV 版本 2 2 中捕获视频 但是 我遇到了一些困难 OpenCV 附带的示例二进制文件都无法检测到我的网络摄像头 最近我发现这篇文章表明答案在于重新编译一个文件 o
  • ASP.NET Core 中间件与过滤器

    在阅读了 ASP NET Core 中间件之后 我对何时应该使用过滤器以及何时应该使用中间件感到困惑 因为它们似乎实现了相同的目标 什么时候应该使用中间件而不是过滤器 9频道有一个关于此的视频 ASP NET 怪物 91 中间件与过滤器 h
  • 在哪里可以找到 Microsoft.Build.Utilities.v3.5

    如何获取 Microsoft Build Utilities v3 5 我正在使用 StyleCop 4 7 Stylecop dll 中的 StyleCop msbuild 任务似乎依赖于 Microsoft Build Utilitie
  • C:设置变量范围内所有位的最有效方法

    让我们来int举个例子 int SetBitWithinRange const unsigned from const unsigned to To be implemented SetBitWithinRange应该返回一个int其中所有
  • 如何高效计算连续数的数字积?

    我正在尝试计算数字序列中每个数字的数字乘积 例如 21 22 23 98 99 将会 2 4 6 72 81 为了降低复杂性 我只会考虑 连续的数字 http simple wikipedia org wiki Consecutive in
  • 如何组合两个 lambda [重复]

    这个问题在这里已经有答案了 可能的重复 在 C 中组合两个 lambda 表达式 https stackoverflow com questions 1717444 combining two lamba expressions in c
  • Streamwriter 覆盖 txt 文件中的文本

    有没有什么方法可以重新打开流写入器而不创建新的写入对象 因为此时 当调用 WriteOdd 时 streamwriter 正在覆盖在它之前调用的 WriteEven public void WriteEven StreamWriter wr
  • ContentDialog Windows 10 Mobile XAML - 全屏 - 填充

    我在项目中放置了一个 ContentDialog 用于 Windows 10 上的登录弹出窗口 当我在移动设备上运行此项目时 ContentDialog 未全屏显示 并且该元素周围有最小的填充 在键盘上可见 例如在焦点元素文本框上 键盘和内

随机推荐

  • C语言 习题3-1 比较大小

    题目要求 本题要求将输入的任意3个整数从小到大输出 输入 输出格式 输入在一行中给出3个整数 其间以空格分隔 输出在一行中将3个整数从小到大输出 其间以 gt 相连 思路 写一个通用的排序函数 排序后再输出 代码 include
  • 解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)的问题。

    问题描述 在运行SpringBoot项目时 出现以下错误 大多原因是一下两个原因 1 在resources文件加下创建的mapper文件夹类型没有正确选择 eclipse选择Folder idea选择Directory 2 映射文件的map
  • CentOs自带mysql卸载时出现无法卸载情况的解决办法

    CentOs自带mysql卸载时出现无法卸载情况的解决办法 首先通过如下命令来查看我们的操作系统上是否已经安装了mysql数据库 rpm qa grep mysql 这个命令就会查看该操作系统上是否已经安装了mysql数据库 发现出现如下情
  • 数据仓库灵魂30问之数据仓库、数据中台、数据湖有什么区别

    先说结论 数据仓库实行分而治之 面向BI 商业智能 数据中台实行一统天下 面向DateAPI 数据服务API 数据湖实行无为而治 面向AI 人工智能 他们三个实行的策略不同 用途不同 但是数据中台可以包容数据仓库与数据湖 数据湖与数据仓库是
  • 2023电子信息工程毕业设计题目选题推荐

    文章目录 1前言 2 如何选题 2 1 嵌入式开发方向 2 2 物联网方向 2 3 移动通信方向 2 4 人工智能方向 2 5 算法研究方向 2 6 移动应用开发方向 2 7 网络通信方向 2 8 学长作品展示 4 最后 1前言 近期不少学
  • sql截去最后一位_SQL截取最后一个由字符分隔的字符串

    SQL如果一个字符串由某个字符分隔 例如 火锅 gt 中餐 gt 极品美食 10 20 300 怎么得到字符最后一个字符串 极品美食 300 使用reverse配合charindex来实现 reverse是把字符串倒置 然后通过charin
  • 终于知道程序员为什么总是带个耳机了!

    能别带耳机吗 你能别来打扰我工作吗 不能 前阵子有篇热文 当一个程序员一天被打扰 10 次 后果很惊人 看后网友都表示深有同感 来看看这些网友都是怎么讲的 热心市民 开发小哥哥旁边放着一个计数器 我好奇的问他这个是记录每天的bug数吗 他说
  • 一分钟带你解决“command not found“报错

    长话短说 command not found 找不到命令 这类错误出现的原因有很多 根据具体情况分析 常见的有以下3种 1 不是可执行命令 也就是你输入的代码不合法 没有被定义 root localhost test jsjsjjdjd b
  • Python读写Excel文件第三方库汇总,你想要的都在这儿!

    恢复内容开始 常见库简介 xlrd xlrd是一个从Excel文件读取数据和格式化信息的库 支持 xls以及 xlsx文件 http xlrd readthedocs io en latest 1 xlrd支持 xls xlsx文件的读2
  • 安全帽识别 安全帽佩戴效果 安全帽检测 yolov4安全帽识别 yolov3

    施工场景下的行为识别领域 该应用领域在技术上可拆分为两部分 视频跟踪和行为识别 这一周密集调研了文献 发现着实是一个大坑 其中的视频跟踪最近的各頂会论文出现最多的是单目标跟踪 而我们要解决的确是多目标跟踪 最近出的较好的能实用性的是deep
  • react+umi+antdesign+typescript从零构建后台系统

    确保电脑有node 查看方式 node v 2 确保电脑有umi 查看方式 umi v 没有umi的安装方式 npm install g umi 3 执行以下代码 npm create umi 文件名 或者 yarn create umi
  • 不要在问了!工作六年总结的Java面试题与经验

    前言 最近看到很多小伙伴都在因为面试烦恼 所以小编总结了一些面试经验 希望能帮助到大家 一 面试到底在问些什么东西 首先你要知道 面试官的提问和你简历上写的内容是紧密联系的 所以你简历上写的技能一定要会 一般面试包括下面几方面知识类型 Ja
  • 解决[Vue warn]: Error in v-on handler: “TypeError: Cannot read property ‘validate‘ of undefined“

    在做前后端登录时出现下列错误 解决如下 this refs loginForm validate 中的与ref loginForm 名字要相同 或者要定义这个ref 没有定义或者名称不一致都会出现上述错误
  • 你的数字藏品可能真的只是一张图片

    国外 NFT 市场的火爆也同样引燃了国内的市场 像腾讯 阿里等诸多大厂纷纷入局 同时 大量中小企业也在这些头部企业的带领下聚集而来 出于政策风险隐患的防范要求 国内的区块链并不是国外的公链 而是由一个或多个机构独立部署的联盟链 同时也将 N
  • CMD查看当前文件路径下的所有文件名

    介绍 我们知道Linux系统下查看当前文件路径下的所有文件名 可以用ls或ll来查看 那么CMD中怎么查看当前路径下的所有文件呢 方案 使用 dir 命令即可 效果如下
  • Go语言编程思想3——错误处理和资源管理

    Go语言编程思想3 错误处理和资源管理 资源管理 及时关闭文件 及时释放资源 如果打开的文件还未关闭就因为出错而在中间跳出 就无法保证有效的资源管理 因此在这里两者一起进行考虑 一 defer调用 调用在函数结束时发生 在return pa
  • echarts 调整x类目轴axisLabel间距

    场景 产品认为x轴的刻度太密集 需要稀一点 调研 关于这个需求 想到的有 xAxis interval 指定的是所有横坐标的间隔 需要自行计算间隔多少 xAxis splitNumber 对类目轴不生效 xAxis axisLabel fo
  • 【java 程序设计实训】学生请假管理系统

    学生请假管理系统 运行结果 学生请假管理系统需求分析 GUI 编程 事件处理 数据库编程 部分代码 项目结构 实体类 Admin java LeaveData java UserLogin java MainWindow java leav
  • 嵌入式linux 第二章:软件下载

    嵌入式linux 目录 第一章 vi 使用 第二章 软件下载 第三章 软件下载 嵌入式linux 一 软件下载模式 1 deb 1 1 下载 1 2 删除 2 apt get 2 1 下载 2 2 删除 2 3 清除缓存 查询软件包信息 一
  • 每日一题:订单编号

    订单编号 题目 Daimayuan Online Judge 一开始想用二分答案的 但是后来发现不行 二分答案每找到一个值 就要去掉它的左半边或右半边 但是这里不能去 错误代码 include