[ARC187B] Sum of CC

news/2024/11/18 16:40:01/文章来源:https://www.cnblogs.com/cxqghzj/p/18552980

题意

给定一个长为 \(n\) 的序列,\(a_i \in [1, m]\) 对于所有 \(1 \le i < j \le n\)\(a_i \le a_j\) 则对 \((i, j)\) 连无向边。

求对于给定序列 \(b\) 所有的 -1 替换为 \([1, m]\) 的所有情况所连成的图连通块个数之和。

\(n, m \le 2000\)

Sol

唐完了。

首先注意到连通块都是区间,不会证。

所以显然只需要考虑每个相邻的两个点没有边时连通块增加的贡献即可。

考虑 \((i, i + 1)\) 什么情况下没有边,注意到当前当且仅当: \(\min_{l = 1} ^ {i - 1} > \max_{l = i + 1} ^ n\)

然后你直接枚举分界点,枚举前面一段的最小值,剩下的直接组合算出来就做完了。

复杂度:\(O(n m \log)\)

Code

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <array>
using namespace std;
#ifdef ONLINE_JUDGE#define getchar() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1 << 21, stdin), p1 == p2) ? EOF : *p1++)
char buf[1 << 23], *p1 = buf, *p2 = buf, ubuf[1 << 23], *u = ubuf;#endif
int read() {int p = 0, flg = 1;char c = getchar();while (c < '0' || c > '9') {if (c == '-') flg = -1;c = getchar();}while (c >= '0' && c <= '9') {p = p * 10 + c - '0';c = getchar();}return p * flg;
}
void write(int x) {if (x < 0) {x = -x;putchar('-');}if (x > 9) {write(x / 10);}putchar(x % 10 + '0');
}
bool _stmer;const int N = 2e3 + 5, mod = 998244353;int pow_(int x, int k) {int ans = 1;while (k) {if (k & 1) ans = 1ll * ans * x % mod;x = 1ll * x * x % mod;k >>= 1;}return ans;
}void Mod(int &x) {if (x >= mod) x -= mod;if (x < 0) x += mod;
}array <int, N> s, pre, suf, isl;bool _edmer;
int main() {cerr << (&_stmer - &_edmer) / 1024.0 / 1024.0 << "MB\n";int n = read(), m = read();pre[0] = 2e9;for (int i = 1; i <= n; i++) {s[i] = read(), isl[i] = isl[i - 1];if (~s[i]) pre[i] = min(pre[i - 1], s[i]);else pre[i] = pre[i - 1], isl[i]++;}for (int i = n; i; i--)suf[i] = max(suf[i + 1], s[i]);int ans = 0;for (int i = 1; i <= n; i++) {if (pre[i] <= suf[i + 1])continue;for (int j = suf[i + 1] + 1; j <= min(pre[i], m); j++) {if (j == pre[i])ans += 1ll * pow_(m - j + 1, isl[i]) * pow_(j - 1, isl[n] - isl[i]) % mod, Mod(ans);else if (isl[i])ans += 1ll * (pow_(m - j + 1, isl[i]) - pow_(m - j, isl[i]) + mod) % mod * pow_(j - 1, isl[n] - isl[i]) % mod, Mod(ans);}}write(ans), puts("");return 0;
}

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

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

相关文章

202222313 2024-2025-1 《网络与系统攻防技术》实验六实验报告

1. 实验内容 1.1 实验要求 (1)掌握metasploit、nmap的用法。 (2)学习前期渗透的方法。 (3)利用4个漏洞,实现对靶机的攻击。 1.2 学习内容 (1)metasploit的用法:可以简单总结为“Search-Use-Show-Set-Exploit/run”。 (2)四种漏洞的原理。Vsftpd源码包后门漏洞:在特定版本的v…

创建表(1)

1.切换操作的数据库,默认是在MySQL中进行操作2.创建表,遵循固定格式,枚举可用enum(‘’,‘’)限制条件可用notnull 默认可设置default‘ ’3.修改表:可以用alter table进行修改 alter table 表名 add 列名 数据类型 列级约束条件; alter table 表名 drop column 列名 …

Flutter项目实战(1):通用项目框架搭建

下面介绍 Flutter 最基本的通用项目框架搭建,同时实现了一个登录界面图标和登录界面。 先看下效果图:使用ScreenUtilInit自适应界面大小; 使用Stack支持多个子界面在同一个全屏主界面上选择显示; 使用 Get 插件实现界面之间的跳转和国际化翻译; 界面都通过Transform实现了…

Rocky安装htop

本篇抄的,放在这里防止自己忘记 两条命令: dnf install epel-release -y dnf install htop -yhtop测试: [root@localhost ~]# htop //回车后出现如下图,按q退出

数据采集与融合第四次作业

码云仓库地址 https://gitee.com/sun-jiahui22/crawl_project作业1仓库地址 https://gitee.com/sun-jiahui22/crawl_project/tree/master/作业4/实验4.1作业2的仓库地址 https://gitee.com/sun-jiahui22/crawl_project/tree/master/作业4/实验4.2作业3的仓库地址 https://gitee…

2-SQL注入渗透与攻防

1、SQL注入基础 1.1 什么是sql注入 一、SQL注入概述 二、数据库概述 1.关系型数据库 关系型数据库,存储格式可以直观的反映实体间的关系,和常见的表格比较相似 关系型数据库中表与表之间有很多复杂的关联关系的 常见的关系型数据库有MySQL、Orcale、PostgreSQL、SQL Server等…

vscode go语言注释语句黄色波浪线

go语言注释代码总是飘着黄色波浪线提示:(with optional leading article) (ST1021)go-staticcheck,非常影响观感。 经过查询发现,go-staticcheck 是一个用于 Go 代码静态分析的工具,用来检测代码中的潜在问题、代码规范以及常见的错误。本次错误信息来自 go-staticcheck 中…

1-信息收集

1.1 域名信息 whois、域名反查、ICP备案、企业信息查询 子域名收集工具:Layer子域名挖掘机等 原理:枚举、字典 域名:baidu.com 子域名:news.baidu.com、map.baidu.com、www.baidu.com、... 域名DNS信息 Domain Name Server 域名解析服务www.baidu.com --> 域名解析服务 …

springboot~jpa优雅的处理isDelete的默认值

如果多个实体类都有 isDelete 字段,并且你希望在插入时为它们统一设置默认值,可以采取以下几种方法来减少代码重复: 1. 使用基类(抽象类) 创建一个基类,其中包含 isDelete 字段和 @PrePersist 方法。然后让所有需要这个字段的实体类继承这个基类。 示例代码: import jav…

20222412 2024-2025-1 《网络与系统攻防技术》实验六实验报告

20222412 2024-2025-1 《网络与系统攻防技术》实验六实验报告 1.实验内容 主要任务:基于Metasploit框架,实现漏洞利用。 Metasploit框架(MSF)由HD Moore于2003年发布,并在2007年使用Ruby语言重写。它提供了一套完整的渗透测试框架,包括漏洞利用模块、攻击载荷、辅助模块、…

01计算机简介

001简介 计算机硬件逻辑组成