首页 > 其他分享 >CF1603C Extreme Extension

CF1603C Extreme Extension

时间:2024-03-23 21:12:18浏览次数:33  
标签:std num Extension int vector CF1603C Extreme dp op

CF1603C Extreme Extension

拿到一题有神秘操作的题目,先考虑把神秘操作搞清楚

对于一个子段,最末尾的数一定不能动,考虑从后往前贪心,当出现 \(a_i>a_{i+1}\) 时,需要将 \(a_i\) 拆分。要使当前操作最优,我们要让拆分完的第一个数尽可能大,手算一下就可以得出结论:一共需要拆分 \(\lceil \frac{a_i}{a_{i+1}}\rceil-1\) 次,第一个数的最大值为 \(\lfloor\frac{a_i}{\lceil \frac{a_i}{a_{i+1}}\rceil}\rfloor\)。

此时根据 \(a_i\) 只被 \(a_{i+1}\) 影响,可以考虑 dp,设 \(f_{i,v}\) 表示有多少以 \(a_i\) 为开头的子段,使得 \(a_i\) 拆分完之后最小值为 \(v\)。

考虑转移,朴素的做法,枚举所有 \(f_{i+1,x}\),此时 \(c=\lceil \frac{a_i}{a_{i+1}}\rceil\),\(p=\lfloor\frac{a_i}{c}\rfloor\),转移到对应的 \(f_{i,p}\) 中,复杂度为 \(O(nV)\),无法通过。

发现对于每一个 \(i+1\),最多只能转移到 \(\sqrt{a_{i+1}}\) 个状态中,而对于每个 \(i\),也只有 \(\sqrt{a_{i+1}}\) 个状态不为零,可以继续转移。这个结论可以用数论分块证明。

所以考虑优化 dp,首先滚动数组,空间复杂度为 \(O(n)\)。用两个 vector 维护,将 \(i+1\) 的所有不为零的状态用 vector 存起来,转移到对应的 \(f_{i,p}\) 里。再将 \(i\) 中不为零的状态用另一个 vector 存起来。

考虑按位计算答案,对于每个 \((i,v)\),贡献为 \(i\times (c-1)\times f_{i,v}\),乘法满足分配律,我们在转移的同时更新答案即可。

复杂度降到 \(O(n\sqrt V)\) 。

#include <bits/stdc++.h>

typedef long long i64;

const int mod = 998244353;

void Solve() {
	int n;
	std::cin >> n;

	std::vector<int> a(n + 1);

	int mx = 0;
	for(int i = 1; i <= n; i++) {
		std::cin >> a[i];
		mx = std::max(mx, a[i]);
	}

	std::vector<std::vector<int>> dp(2, std::vector<int> (mx + 1));
	std::vector<int> v[2];
	int op = 1;
	i64 ans = 0;
	for(int i = n; i >= 1; i--) {
		dp[op][a[i]] = 1;
		v[op].push_back(a[i]);
		int lst = a[i];
		for(auto x : v[op ^ 1]) {
			int cnt = (a[i] + x - 1) / x;
			int num = a[i] / cnt;
			ans = (ans + (i64)i * (cnt - 1) % mod * dp[op ^ 1][x]) % mod;
			dp[op][num] += dp[op ^ 1][x];
			if(num != lst) {
				v[op].push_back(num), lst = num;
			}
		}	
		for(auto x : v[op ^ 1]) {
			dp[op ^ 1][x] = 0;
		}
		v[op ^ 1].clear();
		op ^= 1;
	} 

	std::cout << ans << "\n";
}
int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
	
	int t;
	std::cin >> t;

	while(t--) Solve();

	return 0;
}

标签:std,num,Extension,int,vector,CF1603C,Extreme,dp,op
From: https://www.cnblogs.com/FireRaku/p/18091685

相关文章

  • Camunda问题:src-resolve: Cannot resolve the name ‘extension‘ to a(n) ‘element
    问题描述今天,小伙伴在使用云程低代码平台创建流程模板时,出现了报错,如下图:后台堆栈信息如下:ENGINE-16004Exceptionwhileclosingcommandcontext:ENGINE-09005CouldnotparseBPMNprocess.Errors:*src-resolve:Cannotresolvethename'extension'toa(n)'ele......
  • mybatis-plus-extension 百万数据多行插入,几秒入库
    百万数据多行插入,几秒入库最近遇到过一个导入大批量数据耗时过长的问题,查了一下资料,找到一个mybatis-puls的一个插入,大大提高了入库效率,这里给大家分析分析。先介绍一下,本次测试用例是MVC三层结构的例子,大概结构如下:pom.xmlcom.tring.ysyn.entity.Pull.java//数据库实体类c......
  • TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for xx.ts
    TypeError[ERR_UNKNOWN_FILE_EXTENSION]:Unknownfileextension".ts"假如你在编写一个Typescript库函数,你希望将其编译为ESModule,那么你可以通过在package.json中声明"type":"module"来告诉使用者你的库函数使用的模块规范是ESModule。但如果你使用ts-node来运......
  • Paper Reading: Imbalanced regression and extreme value prediction
    目录研究动机文章贡献本文方法不平衡回归的相关函数控制点插值方法自动和非参数相关函数评价指标实验结果数据集和实验设置模型选择实验模型优化优点和创新点PaperReading是从个人角度进行的一些总结分享,受到个人关注点的侧重和实力所限,可能有理解不到位的地方。具体的细节还需......
  • macOS 下使用 pyenv 安装 python 2.n.p 报错,ERROR: The Python zlib extension was no
    TL;DR执行brewinstallzlib安装zlib之后,根据安装信息提示将一下三行变量exportLDFLAGS="-L/opt/homebrew/opt/zlib/lib"exportCPPFLAGS="-I/opt/homebrew/opt/zlib/include"exportPKG_CONFIG_PATH="/opt/homebrew/opt/zlib/lib/pkgconfig"加入到~/.zsh......
  • Vue调试神器vue-devtools配置 / 解决提示 Download the Vue Devtools extension for a
    访问Vue页面,控制台提示:    ......
  • DevExtreme项目相关记录
    1.DxDataGrid是网格(表格标签) 如上图所示:里面的属性意思如下:data-source:动态的数据源show-borders:用于控制是否显示表格单元格之间的边框column-width:设置列的最小宽度key-expr: 用于指定数据项的唯一标识符的表达式allow-column-reordering:是否允许列于列......
  • SharePoint Online Framework Extension 简介
    前言可以使用SharePoint框架(SPFx)扩展来扩展SharePoint用户体验。使用SPFx扩展,可以自定义SharePoint体验的更多方面,包括通知区域、工具栏、列表数据视图和表单。SPFx扩展在生产使用的所有Microsoft365订阅中可用。SPFx扩展使你能够在新式页面和文档......
  • Oracle index domain R-tree(B-tree extension)
    *[构建域索引](https://docs.oracle.com/en/database/oracle/oracle-database/19/addci/building-domain-indexes.html#GUID-E370B5E4-BAC0-49C6-B17D-830B3A507FB4)域索引是为专用域(如空间或图像处理)设计的索引。用户可以在设计器创建索引类型后生成给定类型的域索引。域索引的......
  • 11-Simple Extensions
    基本类型BaseTypes用ABC表示基本类型basetypes/atomictypes名称,$A$表示基本类型组成的集合当展示求值的结果时,将省略λ抽象体,直接简记为一个<fun>,比如λx:B.x><fun>:B→B单位类型UnitTypesUnit类型的成员只有unitDerivedforms在下一节......