CF809C

news/2024/4/25 9:43:58/文章来源:https://www.cnblogs.com/myee/p/Luogu-solution-cf809c.html

思路

转化题意

注意到这个“没有出现过的最小正整数”很不舒服。

改定义:

\[b_{x,y}=a_{x+1,y+1}-1 \]

则我们有

\[b_{x,y}=\operatorname{mex}(\{b_{x,k}|0\le k<y\}\cup\{b_{k,y}|0\le k<x\}) \]

而我们所求的即

\[\sum_{i=x_1}^{x_2}\sum_{j=y_1}^{y_2}[a_{i,j}\le k]a_{i,j} \\=\sum_{i=x_1-1}^{x_2-1}\sum_{j=y_1-1}^{y_2-1}[b_{i,j}<k](b_{i,j}+1)\]

\[f_k(x,y)=\sum_{i<x}\sum_{j<y}[b_{i,j}<k] \]

\[g_k(x,y)=\sum_{i<x}\sum_{j<y}[b_{i,j}<k]b_{i,j} \]

\[h_k=f_k+g_k \]

于是即求

\[h_k(x_2,y_2)-h_k(x_2,y_1-1)-h_k(x_1-1,y_2)+h_k(x_1-1,y_1-1) \]

因此现在的任务就是快速计算 \(f,g\)

我们指出如下事实:

\[b_{x,y}=x\oplus y \]

其中 \(\oplus\) 表示异或

证明:

构造 \(2\) 堆石子的 nim 游戏 \(a_1,a_2\),设其 SG 值为 \(c_{a_1,a_2}\)

由 SG 函数的定义式,我们得到 \(c_{a_1,a_2}=\operatorname{mex}(\{c_{a_1,k}|0\le k<a_2\}\cup\{c_{k,a_2}|0\le k<a_1\})\)

于是使用数学归纳法容易证明,\(b_{x,y}=c_{x,y}\)

由 SG 定理,我们得到 \(c_{a_1,a_2}=a_1\oplus a_2\)

因此,\(b_{x,y}=x\oplus y\)

于是

\[f_k(x,y)=\sum_{i<x}\sum_{j<y}[i\oplus j<k] \]

\[g_k(x,y)=\sum_{i<x}\sum_{j<y}[i\oplus j<k](i\oplus j) \]

这不就是储能表吗!

因此数位 dp 是能做的。当然,这并不优美。

考虑有没有更加优美的做法。

异或卷积

我们发现和式内部仅和 \(i\oplus j\) 有关,而枚举的却是 \(i,j\)

因此考虑能否对每个 \(z=x\oplus y\),反推出有多少个合法的 \((x,y)\) 有序二元组满足此点

定义数列 \(f,g\)异或卷积为数列

\[h_z=\sum_{x\oplus y=z}f_xg_y \]

不妨记为 \(h=f\times_\oplus g\)

显然这个柿子的组合意义为枚举 \(f,g\) 对应下标异或值为 \(z\) 的方案数,其中 \(f,g\) 分别表示其作为子式时变量异或和为某值的方案数。

考虑计算 \(f_k(x,y),g_k(x,y)\) 的过程。

\[f_k(x,y)=\sum_{i<x}\sum_{j<y}[i\oplus j<k]=\sum_{z<k}\sum_{i<x}\sum_{j<y}[i\oplus j=z] \]

\[g_k(x,y)=\sum_{i<x}\sum_{j<y}[i\oplus j<k](i\oplus j)=\sum_{z<k}z\sum_{i<x}\sum_{j<y}[i\oplus j=z] \]

于是记

\[f_i=[i<x] \]

\[g_i=[i<y] \]

\[h=f\times_\oplus g \]

\[h_z=\sum_{i<x}\sum_{j<y}[i\oplus j=z] \]

因此

\[f_k(x,y)=\sum_{z<k}h_z \]

\[g_k(x,y)=\sum_{z<k}zh_z \]

特殊形式的异或卷积

接下来的任务就是观察如何快速计算与记录这个异或卷积的结果了。

因为值域较大,所以异或卷积显然不能暴力使用基于快速沃尔什变换的集合对称差卷积实现,我们考虑观察性质。

不妨设在讨论范围内,一个数列非零值的下标总是小于 \(2^m\)

我们发现,对于数列 \(f,g\),其前一半或后一半下标对应的值总是相等另一半下标对应地递归满足相同性质

简单讨论容易验证,异或卷积保持这个性质不变,因此 \(h=f\times_\oplus g\) 也满足这个性质。

于是我们可以使用 \(m+1\) 对数,来表示这样的一个数列(记录是前一半还是后一半为定值;记录具体是什么值);对于这么一对数列的异或卷积,我们总可以在 \(O(m)\) 的时间内实现,并返回一个仍保持此性质的数列。

这个结论有一个经典的习题:loj3073「2019 集训队互测 Day 2」序列。感兴趣可以去做一做。

因此,我们就可以优美地在 \(O(\log v)\) 的时间内解决每一问了。

Code

翻译没翻到位,原来是对 \(10^9+7\) 取模的……

代码跑得很快。

下面是核心代码。

const ullt Mod=1e9+7;
typedef ConstMod::mod_ullt<Mod>modint;
typedef std::vector<std::pair<bol,modint> >vec;
typedef std::vector<modint>modvec;
const uint M=32;ullt Len[M+1];
modvec User(vec a){modvec Ans(M+1);for(uint i=0;i<=M;i++)Ans[i]=a[i].second*Len[i];for(uint i=M;i;i--)Ans[i-1]+=Ans[i];return Ans;
}
vec mul(vec A,vec B){vec Ans(M+1);modvec UserA=User(A),UserB=User(B);for(uint i=0;i<M;i++){Ans[i].first=A[i].first==B[i].first;Ans[i+1].second+=Ans[i].second+A[i].second*B[i].second*Len[i];Ans[i].second+=A[i].second*UserB[i+1]+B[i].second*UserA[i+1];}Ans[M].second+=A[M].second+B[M].second;return Ans;
}
vec get(ullt r){vec Ans(M+1);for(uint i=0;i<M;i++)if(r>=Len[i])Ans[i]={0,1},r-=Len[i];else Ans[i]={1,0};Ans[M].second=r;return Ans;
}
modint sum(ullt l,ullt r){return(l+r-1)*(r-l)/2;}
modint find(vec A,ullt k){modint ans;ullt from=0;for(uint i=0;i<M;i++)if(A[i].first){if(k>Len[i])ans+=sum(from+Len[i]+1,from+k+1)*A[i].second,k=Len[i];}else{if(k<=Len[i]){ans+=sum(from+1,from+k+1)*A[i].second;return ans;}ans+=sum(from+1,from+Len[i]+1)*A[i].second;k-=Len[i];from+=Len[i];}if(k)ans+=(from+1)*A[M].second;return ans;
}

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

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

相关文章

带你走入C++动态多态的底层

多态按字面的意思就是多种形态&#xff0c;相同的方法调用&#xff0c;但是有不同的实现方式。多态性可以简单地概括为“一个接口&#xff0c;多种方法&#xff0c;实现接口与实现的分离。 C有两种多态形式&#xff1a; 静态多态动态多态而本文主要介绍动态多态的应用。 动态…

力扣1662(javapython)-检查两个字符串数组是否相等(简单)

题目: 给你两个字符串数组 word1 和 word2 。如果两个数组表示的字符串相同,返回 true ;否则,返回 false 。 数组表示的字符串 是由数组中的所有元素 按顺序 连接形成的字符串。示例 1: 输入:word1 = ["ab", "c"], word2 = ["a", "bc…

SpringBoot:ssm和springboot整合

目录 一、整合Mybatis 因为要使用逆向生成代码 pom.xml generatorConfig.xml application.yml 测试 BookController SpringbootmybatisApplication jdbc.properties 二、整合mybatisplus 简介 application.yml MPGenerator SpringbootmpApplication 三、使用my…

ensp华为配置NAT

ensp华为配置NAT 文章目录ensp华为配置NAT1 对PC进行地址、掩码及网关配置2 对路由器进行初始配置3 ART配置3.1 静态NAT配置3.2 动态NAT配置3.3 端口NAT (NAPT) 的配置3.4 Easy IP的配置3.5 NAT Server的配置4 总结拓扑图如图&#xff1a;1 对PC进行地址、掩码及网关配置 略 …

计算机毕设(附源码)JAVA-SSM佳音大学志愿填报系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

计算机毕设(附源码)JAVA-SSM蓟县农家乐网站

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

通俗易懂!一文看懂手机Root的操作与防护

Root&#xff0c;对于任何手机发烧友、玩机客、从事移动设备研发的人员来说&#xff0c;并不陌生&#xff0c;它代表绝大部分移动设备的使用者能够掌握到的最高权限。 从技术层次来讲&#xff0c;用户拥有了修改系统文件的权限&#xff0c;甚至可以控制账户、增加或删除硬件等…

java毕业设计——基于java+JSP+sqlserver的智能在线考试信息管理系统设计与实现(毕业论文+程序源码)——智能在线考试信息管理系统

基于javaJSPsqlserver的智能在线考试信息管理系统设计与实现&#xff08;毕业论文程序源码&#xff09; 大家好&#xff0c;今天给大家介绍基于javaJSPsqlserver的智能在线考试信息管理系统设计与实现&#xff0c;文章末尾附有本毕业设计的论文和源码下载地址哦。 文章目录&a…

内部财务经营分析该怎么做?

对于日常在企业工作的财务人员来说&#xff0c;做对外财务报表分析的机会并不多&#xff0c;我们在网上经常看到的对上市公司财务报表的分析&#xff0c;是基于投资人的角度来对这家公司披露的财务及经营信息所做的分析。 实际工作当中&#xff0c;大家应用到更多的其实是内部…

【Linux详解】——gcc/g++/gdb/git的使用

&#x1f4d6; 前言&#xff1a;本期将学习gcc/g/gdb/git的使用 目录&#x1f552; 1. 程序的翻译过程&#x1f552; 2. 理解选项的含义&#x1f552; 3. 动态链接和静态链接&#x1f552; 4. Linux项目自动化构建工具-make/Makefile&#x1f558; 4.1 背景&#x1f558; 4.2 使…

发布四大战略举措,亚马逊云科技看准了中国云市场的哪些新机会?

导读&#xff1a;全球最大的云厂商&#xff0c;在中国的最新布局。 2022年10月13日&#xff0c;亚马逊云科技在线上举办2022中国峰会。亚马逊云科技不仅发布了云计算技术趋势展望&#xff0c;还宣布了深耕中国市场的四大战略举措&#xff1a;“连中外、襄百业、携伙伴、促绿色”…

【Java8新特性】函数式接口

目录1. 介绍1.1 FunctionInterface注解1.2 函数式接口的调用2. 函数式编程2.1 Lambda的延迟加载技术2.2 Lambda表达式的使用3. 常用的函数式接口3.1 Supplier生产型接口3.2 Consumer消费型接口默认方法&#xff1a;andThen3.3 Predicate条件判断接口3.4 Function普通函数接口默…

ASP.NET Core教程-跨域配置(CORS Configuration)

更新记录 转载请注明出处: 2022年11月1日 发布。 2022年11月1日 从笔记迁移到博客。说明 Cross-Origin Resource Sharing,跨域资源共享 配置方式 在ASP.NET Core中有2种方式配置跨越,中间件方式(middleware approach) 和 特性修饰方式(attributes approach)。 中间件方式…

在Jupyter Notebook中使用Matplotlib(Anaconda3)

Matplotlib&#xff08;官网 Matplotlib — Visualization with Python &#xff09;是一个用于创建二维图形的Python库&#xff0c;它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。将Jupyter Notebook于Matplotlib结合使用效果更好。 在Anaconda3的Jupyter …

HCL AppScan Standard漏洞扫描处理记录

官网&#xff0c;标准版应该是免费的&#xff0c;下载了标准版&#xff0c;没提示激活啥的&#xff0c;最近处理客户的漏洞扫描问题&#xff0c;主要就是修改nginx配置&#xff0c;各种查资料&#xff0c;不停的扫描验证&#xff0c;简单记录下吧。 APP简单使用 app快速下载地…

flutter 系列之:flutter 中的幽灵offstage

文章目录简介Offstage详解Offstage的使用总结简介 我们在使用flutter的过程中&#xff0c;有时候需要控制某些组件是否展示&#xff0c;一种方法是将这个组件从render tree中删除&#xff0c;这样这个组件就相当于没有出现一样&#xff0c;但是有时候&#xff0c;我们只是不想…

技术革新,取代传统会议模式?原来这么简单

随着AI人工智能的盛行&#xff0c;各领域面临前所未有的技术革新。人脸识别作为人工智能的一项重要技术&#xff0c;为工作及生活带来极大便捷&#xff0c;增效赋能。 人脸签到技术5大优势 01.人脸识别稳定&#xff0c;即使在光源不佳、角度受限的环境下也能精准识别&#xff1…

Libuv 各个回调(异步)事件的调用时机

Libuv 各个回调&#xff08;异步&#xff09;事件的调用时机 uv_close、uv_timer_start uv_close中注册的回调事件&#xff08;close_cb&#xff09;查阅官网API文档&#xff0c;Handle句柄是调用uv_close便会立即关闭&#xff0c;而注册的回调事件将推迟到下一次Loop循环中执…

设计模式——创建型模式

五大-创建型模式一、单例模式1、简介2、单例模式八种方式2.1、饿汉式&#xff08;静态常量&#xff09;2.2、饿汉式&#xff08;静态代码块&#xff09;2.3、懒汉式&#xff08;线程不安全&#xff09;2.4、懒汉式&#xff08;线程安全&#xff0c;加同步方法&#xff09;2.5、…

C2 实验 学习笔记

C2 实验 免责声明 本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关. C2隐藏技术 CDN 准备 一台 vultr centos7 机器一个域名cloudflare 账号 挂上 cdn 在域名购买后配置&#xff0c;cf 中的域名解析&#xff0c;在 cf 中配置…