贪心+线段树,CF720A. Closing ceremony

news2025/1/14 1:13:50

目录

一、题目

1、题目描述

2、输入输出

2.1输入

2.2输出

3、原题链接

二、解题报告

1、思路分析

2、复杂度

3、代码详解


一、题目

1、题目描述

2、输入输出

2.1输入

2.2输出

3、原题链接

Problem - 720A - Codeforces


二、解题报告

1、思路分析

如果人都在左上角如何分配?

把人按照耐力排序,位置按照权值排序,从小到大分配,就变成了贪心入门问题中的给小孩分糖果问题

现在变成了两拨人,每个位置对两拨人有不同的权值,如何分配?

先把每拨人升序排序,然后先处理左边这拨人。

顺序遍历左部人,选取当前这个人能拿的位置中对右边那拨人最远的位置,这样有个好处:由于升序排序,所以当前人能拿的位置后面人也能拿,同时又保证了对右部人影响最小

对于位置的维护可以用set或者线段树

set不容易写错,但是为了练习下线段树还是用了线段树,结果调了1h x_x

2、复杂度

时间复杂度: O(mn logmn)空间复杂度:O(mn)

3、代码详解

#include <bits/stdc++.h>
const int N = 1e4 + 10;
#define lc p << 1
#define rc p << 1 | 1
typedef std::pair<int, int> PII;
int n, m, k, l, tot;
int dstk[N], dstl[N];
PII vk[N];
struct node {
    int l, r, vl, id;
} tr[N << 4];
void pushup(int p) {
    if(tr[lc].vl > tr[rc].vl)
        tr[p].vl = tr[lc].vl, tr[p].id = tr[lc].id;
    else 
        tr[p].vl = tr[rc].vl, tr[p].id = tr[rc].id;
}
void build(int p, int l, int r) {
    tr[p] = { l, r, vk[l].second, l };
    if (l == r) return;
    int mid = l + r >> 1;
    build(lc, l, mid), build(rc, mid + 1, r);
    pushup(p);
}
void update(int p, int x, int v) {
    if(tr[p].l == x && tr[p].r == x) {
        tr[p].vl = tr[p].id = v;
        return;
    }
    int mid = tr[p].l + tr[p].r >> 1;
    if(x <= mid) update(lc, x, v);
    else update(rc, x, v);
    pushup(p);
}
PII query(int p, int l, int r) {
    if (l <= tr[p].l && tr[p].r <= r) {
        return std::make_pair(tr[p].id, tr[p].vl);
    }
    int mid = tr[p].l + tr[p].r >> 1;
    PII res = std::make_pair(-1, -1);
    if(l <= mid) {
        PII t = query(lc, l, r);
        if (t.second > res.second) res = t;
    }
    if(r > mid) {
        PII t = query(rc, l, r);
        if (t.second > res.second) res = t;
    }    
    return res;
}

int find(int x) {
    int l = 1, r = tot, res = 1;
    while(l <= r) {
        int mid = l + r >> 1;
        if (vk[mid].first <= x) res = mid, l = mid + 1;
        else r = mid - 1;
    }
    return res;
}

int main() {
    std::ios::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0);
    std::cin >> n >> m >> k;
    for (int i = 0; i < k; i ++) std::cin >> dstk[i];
    std::cin >> l;
    for (int i = 0; i < l; i ++) std::cin >> dstl[i];
    for (int i = 1; i <= n; i ++)
        for (int j = 1; j <= m; j ++)
            vk[++ tot] = std::make_pair(i + j, i + m + 1 - j);
    std::sort(vk , vk + tot);
    std::sort(dstk, dstk + k), std::sort(dstl, dstl + l);
    build(1, 1, tot);
    for (int i = 0; i < k; i ++) {
        int r = find(dstk[i]);
        PII t = query(1, 1, r);
        if (t.second == -1) {
            std::cout << "NO";
            return 0;
        }
        update(1, t.first, -1);
    }
    std::vector<int> res;
    res.reserve(tot);
    for(int i = 1; i <= tot; i ++) {  
        PII t = query(1, i, i);
        if(~t.second)
            res.push_back(t.second);
    }
    std::sort(res.begin(), res.end());
    for (int i = 0, t = 0; i < l; i ++) {
        if (t > res.size() || dstl[i] < res[t]) {
            std::cout << "NO";
            return 0;
        }
        t ++;
    }
    std::cout << "YES";
    return 0;
}

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

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

相关文章

顶级SCI优化!24年新算法冠豪猪算法CPO优化无人机集群三维路径规划!先用先发!

声明&#xff1a;文章是从本人公众号中复制而来&#xff0c;因此&#xff0c;想最新最快了解各类智能优化算法及其改进的朋友&#xff0c;可关注我的公众号&#xff1a;强盛机器学习&#xff0c;不定期会有很多免费代码分享~ 目录 结果展示 原理讲解 一、路径长度成本 F1 …

斯坦福大学的在线密码学课程

密码学是保护计算机系统信息不可或缺的工具。在本课程中&#xff0c;您将了解密码系统的内部工作原理&#xff0c;以及如何在实际应用中正确使用它们。课程首先将详细讨论当强大的对手窃听和篡改流量时&#xff0c;拥有共享密钥的双方如何进行安全通信。我们将研究许多已部署的…

EtherCAT运动控制器Delta机械手应用

ZMC406硬件介绍 ZMC406是正运动推出的一款多轴高性能EtherCAT总线运动控制器&#xff0c;具有EtherCAT、EtherNET、RS232、CAN和U盘等通讯接口&#xff0c;ZMC系列运动控制器可应用于各种需要脱机或联机运行的场合。 ZMC406支持6轴运动控制&#xff0c;最多可扩展至32轴&#…

【数据库原理及应用】期末复习汇总高校期末真题试卷08

试卷 一、选择题(每题 2 分&#xff0c;共 30 分)    1. ___ ____是长期存储在计算机内的有组织,可共享的数据集合. A.数据库管理系统 B.数据库系统 C.数据库 D.文件组织 2. 数据库类型是按照 来划分…

【ITK配准】第十期 进化优化配准样例

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享ITK配准中的进化优化配准样例,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~YO 进化优化配准 …

Baidu Comate:智能编码,编程效率的革新者

文章目录 一、何为智能编码助手&#xff1f;二、Baidu Comate智能编码助手简介三、Baidu Comate注册四、Baidu Comate体验Comate插件功能1.注释生成代码2.函数注释生成3.行间注释生成4.生成代码解释5. 调优建议 五、插件功能的使用体验感受和建议 &#x1f6a9;结语 一、何为智…

Linux|了解如何使用 awk 内置变量

引言 当我们揭开 Awk 功能部分时&#xff0c;我们将介绍 Awk 中内置变量的概念。您可以在 Awk 中使用两种类型的变量&#xff1a;用户定义的变量和内置变量。 内置变量的值已经在 Awk 中定义&#xff0c;但我们也可以仔细更改这些值&#xff0c;内置变量包括&#xff1a; FILEN…

三.搜索与图论(未完结)

DFS(深搜) 之前写过三篇关于dfs的 练习总结: 基础算法--递归搜索DFS练习总结(上)-CSDN博客 基础算法--递归搜索DFS练习总结(中)-CSDN博客 基础算法--递归搜索DFS练习总结(下)-CSDN博客 以下题目均为 补充练习: P1460 [USACO2.1] 健康的荷斯坦奶牛 Healthy Holsteins …

【隧道篇 / WAN优化】(7.4) ❀ 03. WAN优化的原理 ❀ FortiGate 防火墙

【简介】相信对WAN优化感兴趣的人都会有疑问&#xff0c;WAN优化真的有作用吗&#xff1f;如果真的有作用&#xff0c;那是根据什么原理呢&#xff1f;让我们来更深入的了解一下。 客户端和服务器端 其实很多人在一开始看到WAN优化这个词&#xff0c;就自然的以为上网速度太慢&…

C++学习第十三天(多态)

1、多态的概念 概念 就是指多种形态&#xff0c;具体点就是去完成某个行为&#xff0c;当不同的对象去完成时会产生不同的状态 2、多态的定义及实现 多态的构成条件 多态是在不同继承关系的类对象&#xff0c;去调用同一函数&#xff0c;产生了不同的行为。 要在继承中构成…

linux权限维持-HackerPermKeeper

&#x1f512; HackerPermKeeper 通过渗透拿到权限之后&#xff0c;为了不让权限丢失&#xff0c;都会进行权限维持&#xff0c;而在进行权限维持的时候&#xff0c;红队需要花费大量的时候&#xff0c;来验证是否合适&#xff0c;因此在这款工具就诞生 HackerPermKeeper[黑客…

【动态规划】子数组、子串系列I|最大子数组和|环形子数组的最大和|乘积最大子数组|乘积为正数的最长子数组长度

一、最大子数组和 最大子数组和 算法原理&#xff1a; &#x1f4a1;细节&#xff1a; 1.返回值为dp表每个位置的最大值&#xff0c;而不是只看最后一个位置&#xff0c;因为可能最后一个位置都不选 2.可以直接在填dp表的时候就进行返回值的比较 3.如果初始化选择多开一个位…

vue+lodop实现web端打印标签功能

背景&#xff1a;项目要求在web端连接标签打印机&#xff0c;打印收件人信息 lodop打印插件地址&#xff1a;Lodop和C-Lodop官网主站 在项目中使用 1、去官网下载lodop包下载中心 - Lodop和C-Lodop官网主站 windows系统直接下载windows32版的就可以 2、解压安装 点击CLodop…

gtest的编译与使用

文章目录 gtest的编译与使用概述笔记CMake参数官方文档测试程序测试效果END gtest的编译与使用 概述 gTest是 googletest的缩写&#xff0c;如果直接找gTest项目&#xff0c;是找不到的。 库地址 https://github.com/google/googletest.git 迁出到本地后&#xff0c;切到最新…

vue中使用element的i18n语言转换(保姆式教程-保证能用)

1、项目中需要使用的插件&#xff0c;vue2或vue3、element、vue-i18n、js-cookie、vuex我是在vue2中使用 npm i element-ui -S npm i js-cookie -S npm i vue-i18n8.28.2 //因为我项目使用的vue2&#xff0c;直接安装报错了,就下载了固定的版本2、在main.js中引入i18n impor…

买手机参考

买手机一定要看cpu排行榜&#xff0c;避免受外界宣传或干扰等因素等的影响&#xff0c;导致买家消费者被割韭菜。是高等手机还是低等手机&#xff0c;cpu排行榜就是照妖镜。cpu综合处理能力&#xff08;兼顾功耗&#xff09;排行榜如图。 第二张 第三张 第四张

C#语言核心

一、面向对象基本概念 万物皆对象&#xff0c;用程序来抽象&#xff08;形容&#xff09;对象&#xff0c;用面向对象的思想来编程 用中文去形容一类对象&#xff0c;把一类对象的共同点提取出来&#xff0c;然后用程序语言把它翻译过来&#xff0c;带着对象的概念在程序中使…

Excel 查找值的位置后再用位置取值Excel处理

例题描述 Excel 文件中有下图所示的 3 个片区数据 (不同颜色标明)。 现在要算出1-12对应的一列数据&#xff0c;计算规则&#xff1a;在片区3中依次查找1-12&#xff0c;找到后在片区1对应位置取数&#xff0c;如果是0则取片区2同位置的数&#xff0c;如果是1则取F当前查找数。…

docker-compose管理jenkins

1.安装docker和compose 1.docker 更新系统&#xff1a;yum update 安装依赖项&#xff1a;yum install -y yum-utils device-mapper-persistent-data lvm2 配置镜像源&#xff1a;yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce…

出货300万片后,智舱界「小高通」浮出水面

‍作者 |张祥威 编辑 |德新 2024年北京车展&#xff0c;本土芯片公司开始截击外企供应商。 很长一段时间内&#xff0c;汽车行业智驾芯片看英伟达&#xff0c;座舱芯片看高通。英伟达Orin系列广受欢迎&#xff0c;高通8155席卷主流智能汽车&#xff0c;8295更是被视为最强配置…