当前位置: 首页 > news >正文

CF2039E Shohag Loves Inversions

CF2039E Shohag Loves Inversions

题意:

给你一个数列,初始数列为 $ a = [0, 1] $ ,现在重复进行以下操作若干次:

  • 将当前数组中逆序对个数 \(k\) 插入当前数组中任意一个位置,包括开头或者结尾。

其中 \(n\le 1e6\)

思路:

题意的逆序对数显然不好维护,首先模拟一下操作过程:

初始的逆序对数 \(k=0\) ,在一步步插入的过程中,若插入到了 \(1\) 的后面,我们的逆序对数发生了第一次的改变,\(k=0 \to k=1\) ,序列状态此时为 \(0\dots010\)

然后一步步插入 \(1\) ,当第一次插入到了最后一个 \(0\) 的前面,我们逆序对数再次发生改变 \(k=1\to k\ge 2\)

再次插入 \(2\) ,当我们一直插入到序列末尾的 \(2\) 连续段之中时,逆序对数不变,如果插入到了除此之外的前面的任意一个位置,\(k\) 的值发生改变。

我们发现当 \(k\ge 2\) 时无论如何操作,最终的过程都与 \(k=2\) 同理,所以此时我们发现问题可以分析成三种子问题:\(k=0\)\(k=1\)\(k\ge 2\) ,我们最终只需要把这三种问题形成的序列种数相乘即可。

  • \(k=0\) ,序列一定为 \(0\dots 01\)

  • \(k=1\) ,序列一定为 \(0\dots 0101\dots 1\)

  • \(k\ge 2\) ,可以设计 \(dp\) 状态,观察到若存在两个不同的刚刚升级完的序列,那么此时无论如何插入新逆序对数的位置,对于方案数都不会有影响,所以此时的序列方案数仅与序列长度相关,所以可设 \(f_i\) 表示序列长度为 \(i\) 的刚刚升级完的序列方案数为 \(f_i\) ,那么我们此时就分为两种情况进行插入:

    1. 插入序列末尾的 \(k\) 连续段,对于逆序对数无影响
    2. 插入 \(k\) 连续段前一个位置之前,逆序对数改变

    那么我们就有转移 \(f_i=\sum_j j\times f_j\)

所以我们只需要把这三种情况拼接即可。

http://www.rkmt.cn/news/8269.html

相关文章:

  • 深入解析:sqlite3的加解密全过程
  • U522155 板垣 カノエ is WATCHING YOU std
  • ctfshow web
  • 代码随想录算法训练营第三天 | leetcode 203 707 206
  • 【F#学习】数组:Array
  • ctfshow 菜狗杯
  • 详细介绍:测试用例详解
  • conda 无法安装依赖 CondaHTTPError: HTTP 000 CONNECTION FAILED for url: tsinghua tencentaliyun
  • vulnhub(持续更新)
  • 小爱同学连接电脑进行交互 教程
  • 已完成今日求所有满足长为 $a$ 的和为 $b$ 的按位或为 $c$ 的非负整数序列的异或和的异或和大学习
  • 集群无法启动CRS-4124: Oracle High Availability Services startup failed - 指南
  • Hello Yqc!
  • SAPO去中心化训练:多节点协作让LLM训练效率提升94%
  • 区间问题
  • 解决 Ubuntu 25.04 下 make menuconfig 报 ncurses 错误的问题 - 指南
  • web359
  • 如何在后端优雅地生成并传递动态错误提示?
  • web358
  • WPF包
  • 实用指南:目标检测如何将同时有方形框和旋转框的json/xml标注转为txt格式
  • ctfshow web351
  • Linux虚拟机常用命令与Hadoop生态组件启动大全
  • private void Form1_Load与构造方法前执行顺序
  • HarmonyOS Stage模型与ArkTS:现代应用开发的核心架构与最佳实践 - 详解
  • 完整教程:构建基石:Transformer架构
  • 【先记录一下】windows下使用的lazarus/fpc安装到中文的目录时出错的问题
  • CF182C Optimal Sum
  • HTB UNIV CTF 24 Armaxix靶场漏洞链:命令注入与账户接管实战
  • PyTorch Weight Decay 技术指南