23.7.31 牛客暑期多校5部分题解
E - Red and Blue and Green
题目大意
构造一个长度为 n n n 的序列,满足 m m m 个条件,每个条件包含三个数 l , r , w l,\space r,\space w l, r, w,表示区间左端点,区间右端点,这个区间的逆序对数的奇偶性,保证两个区间包含或者不相交
解题思路
因为区间两两非包含即相交,可以搞出来一棵树的样子,那么遍历区间直接变成遍历树
对于每个遍历的区间,在下方所有区间都满足的情况下,下一级区间奇偶性异或和如果相等则什么操作都不用
如果不相等,那么可以尝试是否能将其分为两个互不相干的区间
可以的话只要将去和把前者的区间的最大值和后者区间的最小值交换即可
上述操作可以将区间的逆序对数增加 1 1 1(因为两者之间的数都比两者小),使奇偶性改变
code
#include<bits/stdc++.h>
using namespace std;
const int N = 1009;
struct lol {int l, r, w;} h[N];
struct dot {int x, y;} e[N];
bool cmp(lol a, lol b) {return a.l < b.l || (a.l == b.l && a.r > b.r);}
int n, m, a[N], top[N], ans, v[N];
stack <int> st;
void ein(int x, int y)
{e[++ ans].x = top[x];e[ans].y = y;top[x] = ans;
}
void dfs(int x)
{v[x] = 1;int op = 0, fl = 0, nl = h[x].l, nr = h[x].r;for (int i = top[x]; i; i = e[i].x){int y = e[i].y;nl = max(nl, h[y].l);nr = min(nr, h[y].r);op ^= h[y].w;fl = 1;}if (op != h[x].w){if (fl == 0 && nl != nr) {swap(a[nl], a[nl + 1]);}else if (nl > h[x].l) {swap(a[nl], a[nl - 1]);}else if (nr < h[x].r) {swap(a[nr], a[nr + 1]);}else {printf("-1"); exit(0);}}for (int i = top[x]; i; i = e[i].x){int y = e[i].y;dfs(y);}
}
int main()
{scanf("%d%d", &n, &m);for (int i = 1; i <= m; ++ i)scanf("%d%d%d", &h[i].l, &h[i].r, &h[i].w);sort(h + 1, h + m + 1, cmp);for (int i = 1; i <= m; ++ i){while (!st.empty() && h[st.top()].r < h[i].r) st.pop();if (!st.empty()) ein(st.top(), i);st.push(i);}for (int i = 1; i <= n; ++ i) a[i] = i;for (int i = 1; i <= m; ++ i)if (!v[i]) dfs(i);for (int i = 1; i <= n; ++ i) printf("%d ", a[i]);return 0;
}
B - Circle of Mistery
题目大意
有一个长度为 n n n 的数列 { a i } \{a_i\} {ai},可以进行连边操作,使第 i i i 个数指向 p i p_i pi,这样操作会形成若干个环,要使存在一个环的 a i a_i ai 之和大于等于 k k k,问如何设计 p i p_i pi 才能使其逆序对数最少,输出最少的逆序对数或不可行
解题思路
当 k ≤ 0 k\le0 k≤0 时,只要找有没有比它大的数即可
当 k > 0 k>0 k>0 时,先进行规律寻找
发现你要求出来的最优解一定是找一个区间形成一个环并且选择去掉其中一些负数
逆序对数是区间长度减 1 1 1 再加上去掉的数的个数
假设先把左端点确定去枚举右端点,并用优先队列存其中的负数方便处理
如果维护的区间和大于等于 k k k,可以从优加入去掉的负数(绝对值小的优先)
如果维护的区间和小于 k k k,可以将其中的负数从优去掉(绝对值大的优先)
如果负数加多了就回退一个,如果和不够就继续枚举下一位
在上述过程中维护顺带维护答案并在合法情况下求最小值即可
code
#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 9;
const int INF = 1e9;
int n, k, ans, a[N];
priority_queue <int> q, q1;
//q大根堆取负以维护小根堆,记录在答案中的负数,q1维护剔除的负数
int main() {scanf("%d%d", &n, &k); ans = INF;for (int i = 1; i <= n; ++ i)scanf("%d", &a[i]);for (int i = 1; i <= n; ++ i) {int cnt = 0, tmp = -1, num = 0;while (!q.empty()) q.pop();while (!q1.empty()) q1.pop();for (int j = i; j <= n; ++ j) {++ tmp; ++ cnt; num += a[j];//tmp为维护的答案,cnt为在此答案用的数的个数if (a[j] < 0) q.push(-a[j]);while (!q1.empty() && num + q1.top() >= k)//两个顺序不能反,这样才能保证维护合法方案q.push(-q1.top()), num += q1.top(), q1.pop(), -- tmp, ++ cnt;while (!q.empty() && num < k)q1.push(-q.top()), num += q.top(), q.pop(), ++ tmp, -- cnt;if (num >= k && cnt) ans = min(ans, tmp);//要确定当前区间和大于等于k并且有数在答案中,将k<=0的情况一同处理}}printf("%d", ans == INF ? -1 : ans);return 0;
}
相关文章:
23.7.31 牛客暑期多校5部分题解
E - Red and Blue and Green 题目大意 构造一个长度为 n n n 的序列,满足 m m m 个条件,每个条件包含三个数 l , r , w l,\space r,\space w l, r, w,表示区间左端点,区间右端点,这个区间的逆序对数的奇偶性&…...
Python爬虫的学习day02 requests 模块post 函数, lmxl 模块的 etree 模块
1. requests 模块post 函数 1.1 post 函数的参数 (简单版) 参数1: url 网络地址 参数2: data 请求数据 (一般数据是 账号,密码) 参数3: headers 头请求 (…...
客户流失分析预测案例 -- 机器学习项目基础篇(7)
客户流失 它是指现有的客户、用户、订阅者或任何类型的回头客停止与公司开展业务或结束与公司的关系。 客户流失的类型 合同客户流失:当客户签订了服务合同并决定取消服务时,例如有线电视,SaaS。自愿流失:当用户自愿取消服务时…...
uniapp中我使用uni.navigateTo跳转webview页面传参,但是接收的参数只有一半。
在uniapp中使用uni.navigateTo跳转webview页面传参时,可能会遇到接收的参数只有一半的情况。这可能是因为在跳转时,url的长度超过了限制。为了解决这个问题,可以使用encodeURIComponent和decodeURIComponent进行编码和解码。 具体的解决办法…...
使用kaminari,在列表页实现分页功能
安装 1. bundller 大于1的话,可以使用这个版本 gem install kaminari -v 0.16.3 或者 gem kaminari 2. 使用命令: $ bundle install 3. 然后使用这个命令可以创建一个config文件 $ rails g kaminari:config 4. 重新启动服务器 bundle exec rail…...
Android 性能调优之bitmap的优化
背景 Android开发中,加载图片过多、过大很容易引起OutOfMemoryError异常,即我们常见的内存溢出。因为Android对单个应用施加内存限制,默认分配的内存只有几M(具体视不同系统而定)。而载入的图片如果是JPG之类的压缩格…...
HOT74-数组中的第K个最大元素
leetcode原题链接:数组中的第K个最大元素 题目描述 给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O…...
类与对象【中】
欢迎来到Cefler的博客😁 🕌博客主页:那个传说中的man的主页 🏠个人专栏:题目解析 🌎推荐文章:题目大解析2 目录 👉🏻类的默认6个成员函数👉🏻构造…...
uni-app:实现列表单选功能
效果图: 核心解析: 一、 <view class"item_all" v-for"(item, index) in info" :key"index"><view classposition parameter-info text-over :classitem.checked?"checked_parameter":""…...
vue中axios二次封装并发起网络请求配置
1.安装axios npm i axios 2.导入 //对axios进行二次封装 import axios from "axios"// 创建axios实例,其实request就是axiosconst requests axios.create({// 发请求的时候自动出现api// baseURL:"api",// 请求超时的时间timeout:5000, })…...
开源全文搜索引擎汇总
1、Apache Lucene Java 全文搜索框架 许可证:Apache-2.0 开发语言:Java 官网:https://lucene.apache.org/。Apache Lucene 是完全用 Java 编写的高性能、功能齐全的全文检索引擎架构,提供了完整的查询引擎和索引引擎、部分文本分析引擎。目的是为软件开发人员提供一个简单…...
gitlab CI/CD 安装 gitlab runner
一、为什么需要安装gitlab runner ? 极狐GitLab Runner 极狐GitLab Runner 是在流水线中运行作业的应用,与极狐GitLab CI/CD 配合运作。 说白了就是你部署的一个agent。 二、如何安装? 1.介绍通过helm部署github runner 2.helm添加仓库 h…...
服务器中了malox勒索病毒后怎么办怎么解决,malox勒索病毒解密数据恢复
服务器遭受Malox勒索病毒攻击后,快速解密并恢复数据至关重要,以便减少更大的经济损失。近期,新的一波malox勒索病毒正在肆虐,我们收到很多企业的求助,企业的服务器数据库遭到了malox勒索病毒攻击,导致系统内…...
Python小白学习:超级详细的字典介绍(字典的定义、存储、修改、遍历元素和嵌套)
目录 一、字典简介1.1 创建字典1.2 访问字典中的值1.3 添加键值对1.4 修改字典中的值实例 1.5 删除键值对1.6 由多个类似对象组成的字典1.7 使用get()访问值1.8 练习题 二、遍历字典2.1 遍历所有键值对实例 2.2 遍历字典中的所有键2.3 按照特定顺序遍历字典中的所有键2.4 遍历字…...
word转pdf两种方式(免费+收费)
一、免费方式 优点:1、免费;2、在众多免费中挑选出的转换效果相对较好,并且不用像openOffice那样安装服务 缺点:1、对字体支持没有很好,需要安装字体库或者使用宋体(对宋体支持很好)2、对于使…...
基于图像形态学处理的目标几何形状检测算法matlab仿真
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 .................................................... %二进制化图像 Images_bin imbinari…...
python系列教程211——map
朋友们,如需转载请标明出处:https://blog.csdn.net/jiangjunshow 声明:在人工智能技术教学期间,不少学生向我提一些python相关的问题,所以为了让同学们掌握更多扩展知识更好地理解AI技术,我让助理负责分享…...
SW - 3D打印件最好带上浮雕文字标记
文章目录 SW - 3D打印件最好带上浮雕文字标记概述笔记END SW - 3D打印件最好带上浮雕文字标记 概述 做了一些散料飞达的压板, 下了3D打印的单. 一共有10种压板, 每种压板做的数量不等.压板分为2个大的类(中间压板, 边上的压板), 每个类中分了5个子类, 子类之间只是一个高度方…...
Kafka-副本数量设置
1. ISR副本数量设置 指的是存活的副本数量 ISR 机制的另外一个相关参数是 min.insync.replicas , 可以在 broker 或者主题级别进行配置,代表 ISR 列表中至少要有几个可用副本。这里假设设置为 2,那么当可用副本数量小于该值时,就认为整个分…...
解决github打不开的方法
解决github打不开的方法 本文参考文章:解决可ping通但无法访问github网站的问题 一、确定域名github.com的ip地址 进入网址 IP/服务器github.com的信息 - 站长工具 (chinaz.com),查看 ip 地址。 20.205.243.166 github.com二、确定域名github.global.…...
网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
