Hello 2023 D. Boris and His Amazing Haircut

news2024/12/23 5:11:52

原题链接:Problem - D - Codeforces

题意:

给定长度为 n 的数组 A ,代表 Boris 现在的头发长度,和一个长度为 n 的数组 B ,代表他希望的发型的头发长度。理发师手里有 m 把剪刀,每个都只能用一次,剪刀的所剪的高度用 xi 给出。
对于每一把未使用过的推子:
理发师可以选择一个 [l,r] 区间;
将该区间的所有头发 ai 修建为 min(ai,x) 。
请问理发师用手中的这些推子,能不能剪完 Boris 的发型。

思路:显然,若存在a[i]<b[i],则输出NO,因为剪头发只能让a[i]变短,不能让a[i]变长。然后,若a[i]!=b[i]我们才需要操作它,否则不需要。其实,判断完这两步数组a基本没什么用了,以下都是基于对数组b的操作的解释,主要说明的是如何让相同类型剪刀的使用次数变少,并且操作合法。

首先,我们可以选择两个相同的数作为端点,通过样例一可以看出,如果端点内的数都小于等于端点,那么这个修剪区间就是合法的,因为我们可以先将这个区间,都变为小于等于端点的长度,再让区间内小于端点的数通过其它操作变小。反之,若一个区间内有大于端点的数,那么这个修剪区间就是不合法的,因为若你修剪了这个区间,就会使这个大于端点的值变小,它就变不回来了,这样就算a数组再怎么操作也变不成b数组了。

题目中有一个很贴心的样例,我们来看看它:

这两个样例的唯一的区别是什么呢?就是给的剪刀5的数量。我们来看看为什么使用剪刀5数量至少是2个。

首先我们判断下需要修剪的5的地方,就是这: 

还有两个5没做上标记,是因为a[i]也是5,我们不用管它。

所以一开始我们需要3个剪刀5。

我们来逐一检查区间是否合法:

这个区间内所有的数都小于等于它的端点,也就是5,所以这个区间合法,我们可以只用一次操作就能将两个点变成5,这样需要剪刀5的数量-1,变成2了。

接下来我们来看下一个区间:

区间内就一个数,但是这个数比5大,也就是说,我们不能将第三个5合并到第一个区间内,对于数字5,我们剩下了两个区间。最后对于数字5,我们需要修剪的就是两个区间,也就是消耗了两把剪刀。

总结一下,这道题主要考察快速求区间最值,用树状数组、线段树、栈都能写,我用的是树状数组,然后存一下下标判断剪刀是否足够就行,具体实现见代码注释

int lowbit(int x) {
    return x & (-x);
}
void update(int x) {
    int lx, i;
    while (x <= n) {
        h[x] = b[x];
        lx = lowbit(x);
        for (i = 1; i < lx; i <<= 1) h[x] = max(h[x], h[x - i]);
        x += lowbit(x);
    }
}
int query(int x, int y) {
    int ans = 0;
    while (y >= x) {
        ans = max(b[y], ans);
        y--;
        for (; y - lowbit(y) >= x; y -= lowbit(y)) ans = max(h[y], ans);
    }
    return ans;
}
void solve() {
    map<int, int> mp;//我们能用的各个剪刀数 
    map<int, vector<int>> mp2;//需要操作的各个数的下标 
    map<int, int> mp3;//我们需要的剪刀数 
    cin >> n;
    FOR(1, n) h[i] = 0;
    FOR(1, n) cin >> a[i];
    FOR(1, n) {
        cin >> b[i];
        if (a[i] != b[i]) mp2[b[i]].push_back(i);//若a[i]!=b[i]则说明需要操作。 
        update(i);
    }
    cin >> m;
    FOR(1, m) {
        cin >> x;
        mp[x]++; //存能用的各个剪刀数 
    }
    FOR(1, n) {
        if (a[i] < b[i]) {//若存在a[i]<b[i],则输出NO,因为剪头发只能让a[i]变短,不能让a[i]变长 
            no;
            return;
        }
        if (a[i] != b[i]) mp3[b[i]]++;
    }
    for (auto [x, v] : mp2) {
        int p1 = 0, p2 = 1;
        while (p1 < v.size() && p2 < v.size()) {
            if (query(v[p1] + 1, v[p2] - 1) <= x) mp3[x]--, p2++;//若区间合法,就合并下标,并且使需要的剪刀数减1 
            else  p1 = p2,p2++;//若区间不合法,就找下一个区间 
        }
    }
    for (auto [x, y] : mp3) {
        if (mp3[x] > mp[x]) {//若需要的剪刀数超过了拥有的剪刀数,则输出NO 
            no;
            return;
        }
    }
    yes;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/138886.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机硕士论文,盲审的老师都很严吗? - 易智编译EaseEditing

首先&#xff0c;学位论文必须论证严谨 对于一个结果的解读&#xff0c;先老老实实的把得到什么结果讲一遍&#xff0c;基于这个所得出的结论说一说&#xff0c;最后&#xff0c;来个非谓语的短句吹一吹重要性或提示意义。 这其实是有套路的一个句子写下来。但是&#xff0c;在…

AC7811-ACMP模拟比较器

在无感的BLDC方波控制中&#xff0c;AC7811没办法再直接通过PWDT模块检测霍尔信号了。 所以需要先进行ACMP模块的初始化配置&#xff0c;使能ACMP模块正常工作后&#xff0c;ACMP会对输入的三相反电动势与电机中电电压进行轮询模拟&#xff0c;得到各相反电动势过零点&#xf…

分享5款有趣但或许不那么实用的软件

今天我想分享几个有趣但或许不那么实用的软件&#xff0c;各位喜欢的朋友可以自行下载呢。 1.软件音量设置——EarTrumpet 听音乐、看视频、玩游戏&#xff0c;在各应用切换过程中&#xff0c;你可能会频繁调整系统音量大小&#xff0c;以适应自己的耳朵。而 EarTrumpet 则可…

AIGC:BAT、抖快的新掘金口?

配图来自Canva可画 AI辅助绘画估值超十万&#xff1f; 12月28日&#xff0c;山东人民出版社看中一位4岁女孩用百家号AI作画创作的AI绘本《超能外星战队》&#xff0c;认为该画价值超十万元且有出版意向。与此同时&#xff0c;“AI作画”像病毒般在各大短视频平台蔓延&#xf…

年度盘点丨2022年,7大关键词彰显用友成长型企业数智力量

导读&#xff1a;这一年&#xff0c;他们用卓越成绩证明自己&#xff0c;用产品创新回馈客户&#xff0c;用实力开启了中国成长型企业数智化产业的逆袭之路&#xff01; 2022年&#xff0c;企业级数智化产业经历了翻天覆地的变化。 曾经万家追捧的“舶来品”在成长型企业的主…

项目管理中,如何对各种文件进行统一版本管理?

不知道你在工作中是否也遇到过这样的问题&#xff1a;1、文件先存一个位置&#xff0c;等晚点再整理&#xff0c;结果过了一段时间&#xff0c;就变成了这样&#xff1a;2、想从电脑中找一份重要材料&#xff0c;要花费很长时间&#xff0c;有时查找一通&#xff0c;却一无所获…

Docker中MySQL主从复制

MySQL主从复制 主从搭建步骤 新建主服务器容器实例3307 docker run -p 3307:3306 --name mysql-master \ -v /mydata/mysql-master/log:/var/log/mysql \ -v /mydata/mysql-master/data:/var/lib/mysql \ -v /mydata/mysql-master/conf:/etc/mysql \ -e MYSQL_ROOT_PASSWORD…

SAP年结账务调整过程中的业务改错处理心得

昨天遇到一个问题在这里分享一下。大家知道刚刚跨年&#xff0c;财务还在做一些后续调整。在业财一体化的系统中&#xff0c;这种调整往往涉及到两个方向&#xff0c;财务端去调&#xff0c;还是业务端去调。但大家要了解一个前提。即然需要做调整&#xff0c;肯定是业务端出错…

IPC(IP CAMERA)

IPC是IP Camera的缩写词&#xff0c;IP是网际协定&#xff0c;Camera是照相机、摄影机&#xff0c;IP Camera顾名思义就是网路摄像机&#xff0c;它是一种由传统摄像机与网路技术结合所产生的新一代摄像机。 注&#xff1a;NVR&#xff0c;全称Network Video Recorder&#xff…

有哪些设备管理软件值得推荐?

有哪些设备管理软件值得推荐&#xff1f; 别滑了&#xff0c; 翻遍全网&#xff0c;好用的设备管理软件都给你整理好了&#xff0c;白嫖的好事可千万别错过。 要知道好用的设备管理软件&#xff0c;可是能为企业持续、稳定、快速发展&#xff0c;及提高经济效益发挥重要作用。…

机器学习实战教程(九):支持向量机实战篇

一、前言 上篇文章讲解的是线性SVM的推导过程以及简化版SMO算法的代码实现。本篇文章将讲解SMO算法的优化方法以及非线性SVM。 本文出现的所有代码&#xff0c;均可在我的github上下载&#xff0c;欢迎Follow、Star&#xff1a;点击查看 二、SMO算法优化 在几百个点组成的小规…

数据的存储

数据的存储 文章目录数据的存储一、数据类型二、整形在内存中的存储2.1 原码、反码、补码2.2 大小端介绍2.3几个经典关于内存存储的例子三、浮点型在内存中的存储3.1 一个令你惊呆的例子3.2 浮点数存储规则一、数据类型 整形家族&#xff1a; char&#xff1a; unsigned char&a…

redhat9---MySQL8练习

目录 1、显示所有职工的基本信息。 2、查询所有职工所属部门的部门号&#xff0c;不显示重复的部门号。 3、求出所有职工的人数。 4、列出最高工资和最低工资。 5、列出职工的平均工资和总工资。 6、创建一个只有职工号、姓名和参加工作的新表&#xff0c;名为工作日…

anaconda 常用命令

在windows winR cmd中运行 或者在 linux的终端terminal中运行 1.查看conda版本 conda --version 2.查看conda现有源 conda config --show-sources 添加国内清华源 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config…

谷粒学院——Day16【统计分析】

❤ 作者主页&#xff1a;Java技术一点通的博客 ❀ 个人介绍&#xff1a;大家好&#xff0c;我是Java技术一点通&#xff01;(&#xffe3;▽&#xffe3;)~* &#x1f34a; 记得关注、点赞、收藏、评论⭐️⭐️⭐️ &#x1f4e3; 认真学习&#xff0c;共同进步&#xff01;&am…

会通转债,大元转债上市价格预测

会通转债基本信息转债名称&#xff1a;会通转债&#xff0c;评级&#xff1a;AA-&#xff0c;发行规模&#xff1a;8.3亿元。正股名称&#xff1a;会通股份&#xff0c;今日收盘价&#xff1a;8.61&#xff0c;转股价格&#xff1a;9.33。当前转股价值 转债面值 / 转股价格 * …

知识管理在商业模式创新中的重要性

我们生活在一个以知识为基础的经济中&#xff0c;与实物资产相比&#xff0c;数据和信息被认为是宝贵的资产。组织正在收集更多的数据&#xff0c;并对其进行处理&#xff0c;以转化为可操作的洞察力。这些洞察力是商业决策和推动战略举措的有力工具。这些洞察力需要被捕获并在…

智慧农业大田解决方案LoRa的LPWAN低功耗广域网无线通信SoC芯片ASR6601

智慧农业大田解决方案利用传感设备、自动化控制设备、气象站实时监测采集田间土壤墒情、气象信息、作物长势信息&#xff0c;主要包含气象监测系统、土壤监测系统、虫情监测系统、水肥一体化智慧灌溉系统、专家服务系统、农产品溯源系统。智慧农业大田解决方案可以准确掌握大田…

C语言—— 表达式求值

C语言—— 表达式求值一、隐式类型转换二、 整型提升三、 算术转换四、操作符的属性表达式求值的顺序一部分是由操作符的 优先级和结合性决定。同样&#xff0c;有些表达式的操作数在求值的过程中可能需要转换为其他类型。一、隐式类型转换 C语言的整型算术运算总是至少以缺省…

通达信股票接口的开源性及兼容性好吗?

通达信股票接口的开源性及兼容性好吗&#xff1f;刚开始炒股的时候&#xff0c;我用同花顺mac版本&#xff0c;界面非常新鲜和简单&#xff0c;然后因为我的朋友是量化的&#xff0c;然后强烈建议使用通达信&#xff0c;小编觉得通达信的开源性及兼容性堪称完美。可以同时兼容&…