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 k0 时,只要找有没有比它大的数即可

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;
}

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

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

相关文章

命令模式-请求发送者与接收者解耦

去小餐馆吃饭的时候&#xff0c;顾客直接跟厨师说想要吃什么菜&#xff0c;然后厨师再开始炒菜。去大点的餐馆吃饭时&#xff0c;我们是跟服务员说想吃什么菜&#xff0c;然后服务员把这信息传到厨房&#xff0c;厨师根据这些订单信息炒菜。为什么大餐馆不省去这个步骤&#xf…

element+vue 之动态form

1.页面部分 <div v-for"(item,index) in formList" :key"index"><el-col :span"6" v-if"item.inputType0"><el-form-item :label"item.conditionName" :prop"item.conditionCode":rules"{req…

Excel·VBA定量装箱、凑数值金额、组合求和问题

如图&#xff1a;对图中A-C列数据&#xff0c;根据C列数量按照一定的取值范围&#xff0c;组成一个分组装箱&#xff0c;要求如下&#xff1a; 1&#xff0c;每箱数量最好凑足50&#xff0c;否则为47-56之间&#xff1b; 2&#xff0c;图中每行数据不得拆分&#xff1b; 3&…

视频汇聚平台EasyCVR视频广场侧边栏支持拖拽

为了提升用户体验以及让平台的操作更加符合用户使用习惯&#xff0c;我们在EasyCVR v3.3版本中&#xff0c;支持面包屑侧边栏的广场视频、分组列表、收藏这三个模块拖拽排序&#xff0c;并且该操作在视频广场、视频调阅、电子地图、录像回放等页面均能支持。 TSINGSEE青犀视频…

Docker 容器化学习

文章目录 前言Docker架构 1、 docker安装2、启动docker服务3、设置docker随机器一起启动4、docker体验5、docker常规命令5.1、容器操作docker [run|start|stop|restart|kill|rm|pause|unpause]docker [ps|inspect|exec|logs|export|import] 5.2、镜像操作docker images|rmi|tag…

前端页面--视觉差效果

代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><link rel"stylesheet" href"https://un…

docker制作镜像

docker制作镜像 docker制作镜像有两种&#xff1a; 1.docker build dockerfile 2.基于容器制作镜像 基于容器制作镜像 语法&#xff1a;docker commit options 容器名称 参数&#xff1a; -a&#xff1a;作者 -c&#xff1a;修改dockfile创建的镜像 -m&#xff1a;提交…

宝存科技企业级固态硬盘解决方案助力企业应用性能提升

企业级固态硬盘解决方案的核心 企业级固态硬盘市场具有产品附加值高、同时进入门槛高的特征&#xff0c;由于国内外巨头和初创企业竞争依然激烈。想要在竞争中脱颖而出&#xff0c;根本还是要靠产品本身的品质和厂商实力。 企业级固态硬盘适用于各类企业应用场景 企业级固态硬盘…

三层交换实验

前言 在实际的企业应用中&#xff0c;我们会先建立不同的vlan把用户先隔开来。然后再通过三次交换机技术打通vlan直接的网络。 这样的目的如下&#xff1a; 隔离&#xff1a; 隔离是广播域&#xff0c;也就是隔离的是故障连通&#xff1a; 连通的是正常的通信 比如校园网&am…

leetcode 416. 分割等和子集

给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集&#xff0c;使得两个子集的元素和相等。 示例 1&#xff1a; 输入&#xff1a;nums [1,5,11,5] 输出&#xff1a;true 解释&#xff1a;数组可以分割成 [1, 5, 5] 和 [11] 。 示例 2&a…

⛳ StringBuffer and StringBuilder 处理字符串

目录 ⛳ StringBuffer and StringBuilder 处理字符串&#x1f3a8; 一&#xff0c;简介&#x1f3ed; 二&#xff0c;常用方法&#x1f69c; 三 &#xff0c;StringBugger&#x1f43e; 四&#xff0c;StringBuilder⭐ 五&#xff0c;StringBuffer和StringBuilder面试 ⛳ Strin…

2023牛客暑期多校训练营6 A-Tree (kruskal重构树))

文章目录 题目大意题解参考代码 题目大意 ( 0 ≤ a i ≤ 1 ) , ( 1 ≤ c o s t i ≤ 1 0 9 ) (0\leq a_i\leq 1),(1 \leq cost_i\leq 10^9) (0≤ai​≤1),(1≤costi​≤109) 题解 提供一种新的算法&#xff0c;kruskal重构树。 该算法重新构树&#xff0c;按边权排序每一条边…

分布式异步任务处理组件(七)

分布式异步任务处理组件底层网络通信模型的设计--如图&#xff1a; 使用Java原生NIO来实现TCP通信模型普通节点维护一个网络IO线程&#xff0c;负责和主节点的网络数据通信连接--这里的网络数据是指组件通信协议之下的直接面对字节流的数据读写&#xff0c;上层会有另一个线程负…

PoseiSwap:基于 Nautilus Chain ,构建全新价值体系

在 DeFi Summer 后&#xff0c;以太坊自身的弊端不断凸显&#xff0c;而以 Layer2 的方式为其扩容成为了行业很长一段时间的叙事方向之一。虽然以太坊已经顺利的从 PoW 的 1.0 迈向了 PoS 的 2.0 时代&#xff0c;但以太坊创始人 Vitalik Buterin 表示&#xff0c; Layer2 未来…

iOS-砸壳篇(两种砸壳方式)

CrackerXI砸壳呢&#xff0c;当时你要是使用 frida-ios-dump 也是可以的&#xff1b; https://github.com/AloneMonkey/frida-ios-dump frida-ios-dump: 代码中需要更改的&#xff1a;手机中的内网ip 密码 等 最后放到我的砸壳路径里&#xff1a; python dump.py -l查看应用…

SpringBoot自定义注解 + AOP+分布式Redis 防止重复提交

第一步 引入依赖pom.xml&#xff1a; <dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.16.3</version> <!-- 使用最新版本 --></dependency><dependency><groupId&g…

单片机传感器类型一览

一、单片机&#xff1a; c51、attiny85 < arduino、stm8/stm32 < esp8266、esp32、raspiberry pico 功能简单型&#xff1a;C51、Attiny85等 功能可以较复杂型&#xff1a;Arduino < STM32 联网、人工智能等高级复杂型&#xff1a;esp8266 < esp32、pico …

docker-compose

文章目录 一、docker-compose简介二、docker-compose安装1.安装命令2.卸载旧版本3.修改权限4、常用命令 总结 一、docker-compose简介 示例&#xff1a;pandas 是基于NumPy 的一种工具&#xff0c;该工具是为了解决数据分析任务而创建的。 二、docker-compose安装 1.安装命令…

JMeter 4.x 简单使用

文章目录 前言JMeter 4.x 简单使用1. 启动2. 设置成中文3. 接口测试3.1. 设置线程组3.2. HTTP信息请求头管理器3.3. 添加HTTP请求默认值3.4. 添加HTTP cookie 管理3.5. 添加http请求3.5.1. 添加断言 3.6. 添加监听器-查看结果树3.7. 添加监听器-聚合报告 4. 测试 前言 如果您觉…

打开的idea项目maven不生效

方法一&#xff1a;CtrlshiftA&#xff08;或者help---->find action&#xff09;&#xff0c; 输入maven&#xff0c; 点击add maven projects&#xff0c;选择本项目中的pom.xml配置文件&#xff0c;等待加载........ 方法二&#xff1a;view->tools windows->mave…