251009

news/2025/10/10 0:54:56/文章来源:https://www.cnblogs.com/Young-Cloud/p/19132264

edu 183 div2

div2

D

假若存在一个满足条件的构造,则最终的排列一定是由若干极长递增子段拼成的,一个区间如果只属于某一个极长递增子段,则这个区间就不包含逆序对,也就不会对 \(k\) 产生贡献;如果一个区间跨越了多个极长递增子段,则这个区间就包含逆序对,也就会对 \(k\) 产生贡献。相对于考虑包含了逆序对的区间,不包含逆序对的区间更容易考虑,所以我们从不包含逆序对的区间入手,尝试构造一个有 \({n(n - 1) \over 2} - k\) 个不含逆序对的区间的排列。

在考虑不包含逆序对区间的数量时,我们只关心有多少个极长递增子段和各自的长度,假设第 \(i\) 个极长递增子段的长度为 \(l_i\),则总共的不含逆序对的区间的数量就是 \(\sum _i {l_i(l_i - 1) \over 2}\),我们这道了这个式子的答案(即\({n(n - 1) \over 2} - k\)),现在要做的就是构造一组满足式子的 \(l_i\)。由于数据范围小,且也满足 dp 的条件,接下来的做法多种多样,dp 也好爆搜也好都能通过,下面给出爆搜的代码

std::vector<int> ans;
int n;
int num;bool vis[N + 5][N * N];bool dfs(int cur, int k) {if (cur == 0) {return k == 0;}int mx = cur * (cur - 1) / 2;if (vis[cur][k] || k > mx || k < 0) {return false;}vis[cur][k] = true;for (int i = 1; i <= cur; ++i) {if (dfs(cur - i, k - i * (i - 1) / 2)) {for (int j = i - 1; j >= 0; --j) {ans.push_back(num - j);}num -= i;return true;}}return false;
}void solve() {int k = 0;std::cin >> n >> k;for (int i = 1; i <= n; ++i) {for (int j = 0; j * 2 < n * n; ++j) {vis[i][j] = false;}}num = n;ans.clear();if (dfs(n, n * (n - 1) / 2 - k)) {for (auto &i : ans) {std::cout << i << ' ';}std::cout << '\n';}else {std::cout << "0\n";}return;
}

E

小清新数据结构题

假设第 \(i\) 个人对观影人数的阈值是 \(p_i\),则对于 \(i\) 来说,需要至少 \(p_i\)\(j\) 满足 \(p_j < p_i\)。于是我们可以处理出 \(cnt_p\) 表示观影人数阈值严格小于 \(p\) 的有多少人,当 \(cnt_p - p < 0\) 时,观影人数阈值为 \(p\) 的人一定都不会观影。但是 \(0 \leq cnt_p - p\) 却不一定说明观影人数阈值为 \(p\) 的会去观影,因为可能存在 \(q < p\)\(cnt_q - q < 0\)。所以我们要找的就是最小的满足 \(cnt_p - p < 0\)\(p\)\(cnt_p\) 就是总共回去观影的人。于是维护一下 \(cnt_p\)\(cnt_p - p\),实现区间修改、区间询问 \(cnt_p - p\) 的最小值和单点查询就好了,线段树易维护。下面给出线段树节点的定义和单点查询的代码:

struct Info {int mn;int r; // 最右边的值int tag;Info (int pos = 0, int val = 0) : mn(val - pos), r(val), tag(0) {}Info (const Info &u, const Info &v) {mn = std::min(u.mn, v.mn);r = v.r;tag = 0;}Info operator + (const Info &u) {return Info(*this, u);}void add(int val) {mn += val;r += val;tag += val;return;}
} tr[M << 3];// 找到第一个 mn 小于 0 的位置
Info find(int cur, int l, int r) {if (l == r) {return tr[cur];}push_down(cur);int m = l + r >> 1;if (tr[cur << 1].mn < 0) {return find(cur << 1, l, m);}else {return find(cur << 1 | 1, m + 1, r);}
}

需要注意的是线段树最后要维护 \(2e6\) 个数,空间别开小了。

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

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

相关文章

MaxProduct

public class MaxProduct {public static int maxProduct(int[] arr) {if (arr == null || arr.length < 2) {return 0;}int max1 = Integer.MIN_VALUE, max2 = Integer.MIN_VALUE;int min1 = Integer.MAX_VALUE, m…

雪落 - L

雪落本文根据作者虚假经历瞎编而成,请各位不要当真。由于作者幼稚的文笔,已借助AI润色。一 她像一道苍白的影子,悄无声息地嵌在教室的角落。 当他踏入十四班,成为初中生的第一刻,目光便无意中被那道身影捕获。她并…

PluginMonitor - Typecho 插件监控工具

为什么需要插件监控? 作为 Typecho 博客的站长,你是否遇到过以下困扰:插件过多导致性能下降:安装了太多插件,不知道哪些在拖慢网站速度 数据库臃肿:插件创建的数据表越来越多,数据库变得臃肿不堪 内存占用不明:…

STM32 教程

STM32单片机学习路径 硬件 已买 STM32F103C8T6 软件 参考教程链接 博客园-stm32单片机教程 CSDN-零基础快速上手STM32开发(手把手保姆级教程) 知乎-稚晖-配置CLion用于STM32开发【优雅の嵌入式开发】 STM32基础入门(…

LibreChat-图文并茂手把手教你搭建自己的AI机器人 Step-by-step guide to building your own chatbot

LibreChat是什么 | About LibreChatLibreChat是一个革命性的人工智能聊天机器人,采用了先进的技术,如OpenAI、GPT-4 Vision、Bing、Anthropic、OpenRouter、Google Gemini等。LibreChat完全开源,支持自托管,为用户…

NOISG 2025 Prelim

NOISG 2025 Prelim 评分 \(\in[0,10]\)。 https://www.luogu.com.cn/problem/list?type=luogu&page=1&tag=436|62 Train Or Bus \(1\)。 \(\sum_{i=1}^n \min(a_i,b_i)\),原因显然。 Ducks And Buttons \(2.…

LCR 129. 字母迷宫

LCR 129. 字母迷宫 LCR 129. 字母迷宫参考题解:灵神题解解题思想 首先我们知道该题需要枚举i=0,1,2,...,n-1,j = 0,1,2,3,...,m-1,以(i,j)为起点开始搜索 同时我们还需要知道target匹配到了哪个字符,定义一个记录参…

先进反应堆:BWRX-300

先进反应堆:BWRX-300 在众多小型模块化反应堆(SMR)的技术路线中,由GE Vernova(GE公司在2022年被拆分为3个公司,其中能源板块改名为 GE Vernova)和日立(Hitachi)的合资企业GVH(GE Hitachi Nuclear Energy)开…

ch58x/ch59x系列芯片Indication添加

前言: 一般在使用BLE协议进行数据传输,会优先考虑Peripheral(外设从机角色例程)。在CH58x的SDK中,自定义包含五种不同属性的服务,包含可读、可写、通知、可读可写、安全可读,唯独没有indication属性的特征值。本…

Lab 4 Challenge - Sum of Proper Elements

source code 主方法 主类 public class SumOfProperElements {public static int sumOfProper(int[] nums) {int sum = 0;for (int i = 0; i < nums.length; i++) {if (nums[i] % (i + 1) == 0) {sum += nums[i];}…

Ignite3 竟然变成分布式数据库了!

Ignite3 怎么变成一个分布式数据库了? 这个问题问得非常好。 Apache Ignite 3(正式名:Apache Ignite 3.x)之所以被称为“分布式数据库”,而不仅仅是 Ignite 2 那样的“内存数据网格 (IMDG)”,是因为它在架构、存…

NUIST 《程序设计基础》 实验1

NUIST 《程序设计基础》 实验1 这是我的第一个实验 实验任务1 #include <stdio.h>int main() {printf(" o \n<H>\nI I\n");return 0; }实验任务2 #include<stdio.h> #include<stdlib.h…

[MIT 6.828] Lab 1 C, Assembly, Tools, and Bootstrapping

2018 版的,不是课改后的 MIT 6.S081,课改前的好像更细致一些。之前学的都太零碎了,过一遍这个课程,用以构建整体的 OS 知识体系。 课程讲义:https://pdos.csail.mit.edu/6.828/2018/xv6/book-rev11.pdf,课程安排…

WCH低功耗蓝牙系列芯片usb烧录故障排查

正常识别:可以在设备管理器中识别出USB Module使用USB烧录的一般操作:按住评估板上的“Download”按键,或者将PB22短接到GND,同时给板子上电。若是第一次拿到芯片,codeflash中是空的,不用按住“Download”按键也…

使用docker构建.net api镜像及nginx反向代理 - binzi

一、使用docker构建.net api镜像并且运行容器 如果你使用的是windows,确保你已经安装了docker 打开Windows PowerShell 运行docker version如果能显示客户端和服务端信息,说明 Docker 环境正常。 在webapi中右键dock…

利用sprintf与snprintf巧妙实现数值变量转换为字符串型

0.前情提要 这是在搞STM32开发时遇到的一个问题,要将数字通过串口发送给上位机,但是HAL库中的HAL_UART_Transmit函数只接受uint8_t *类型的参数,因此我们需要通过一个函数先将数值类型变量转换为char *字符串,再强…

Helmholtz-Gibbs自由能与熵弹性

2025.10.09 开坑Helmholtz 自由能定义:热力学中一个非常重要的势函数,常用于描述恒温(Isothermal)和恒容(Isochoric)条件下的系统。 Helmholtz 自由能的定义公式可以写为 \[ \psi = \]Gibbs 自由能定义 熵弹性定…

日志|电话号码的字母组合|子集|回溯

解题思路:回溯三问:1.当前操作?枚举数组path[i]要填入的字母 2.子问题?构造字符串>= i 的部分 3.下一个子问题?构造>= i+1 的部分对于本题1.当前操作:枚举放入path当前i的字母 例如第2个数字对应的a b c …

Rust 的验证码图像识别系统设计与实现

一、研究背景 验证码(CAPTCHA)是互联网安全中最常见的防护手段之一,用于区分人类用户与自动化程序。 近年来,随着OCR(Optical Character Recognition,光学字符识别)与机器学习的发展,验证码识别已成为人工智能…

Docker实用篇(初识Docker,Docker的基本操作,Dockerfile自定义镜像,Docker-Compose,Docker镜像仓库) - a

Docker实用篇(初识Docker,Docker的基本操作,Dockerfile自定义镜像,Docker-Compose,Docker镜像仓库) 目录Docker实用篇(初识Docker,Docker的基本操作,Dockerfile自定义镜像,Docker-Compose,Docker镜像仓库)0.学习目…