Luogu P11660 我终将成为你的倒影 题解 [ 紫 ] [ 分块 ] [ 分类讨论 }

news/2025/10/8 15:06:40/文章来源:https://www.cnblogs.com/zhr0102/p/19129663

我终将成为你的倒影:考察分块基本功的一道题。

注意到本题强制在线,且这种信息用线段树不是很好维护,所以可以很自然地想到分块

又注意到 \(b \le 500\),所以考虑暴力枚举 \(b\)。发现当 \(b\) 固定的时候,\(a\)\(a, a+b, a+2b\) 等数字答案是一样的,因为可以把分子中的 \(b\) 提出来,不会影响前后两个是否相等。于是可以\(\bm a\) 转化为 $ \bm{a\bmod b}$ 考虑

因为将 \(a\)\(b\) 取模了,所以此时 \(a< b \le 500\),容易想到一个暴力做法:将序列分块,每块维护 \(a, b\) 各自取值时的答案,查询的时候暴力查散块,整块直接加,两个块之间暴力计算,即可做到查询 \(O(\frac{n}{B})\),预处理 \(O(nb^2)\)。显然暴力预处理的部分只要把块数调小一点就不会 MLE,所以只需要优化预处理部分的时间复杂度即可。

继续观察这个函数的性质,因为所有数的 \(b\) 都是相等的,所以当两个数的函数值相差大于等于 \(\bm{2}\) 的时候,这两个数的函数值在任何时候都无法相等。因此枚举 \(b\) 之后,只需要考虑函数值相差 \(\bm1\) 的位置,根据 \(a\bmod b\) 的值分讨即可。具体而言,令 \(x = A_{i - 1} \bmod b, y = A_i \bmod b\)

  • \(A_{i - 1} = A_i\) 时,\(a\in[0, b)\)
  • \(f(A_{i - 1}) = f(A_i)\) 时,\(a\in[0, b - \max\{x, y\})\cup[b - \min\{x, y\}, b)\)
  • \(f(A_{i - 1}) = f(A_i) + 1, x < y\) 时,\(a\in[b - y, b - x)\)
  • \(f(A_{i - 1})+1 = f(A_i) , x > y\) 时,\(a\in[b - x, b - y)\)
  • 其余情况 \(a\in \varnothing\)

这样就可以 \(O(1)\) 计算 \(a\) 的区间了,做一个差分计算贡献即可。

总体时间复杂度 \(O(B+\frac{n}{B}+nb+\frac{n}{B}b^2)\)。当 \(\frac{n}{B} = B\) 时最优,因此 \(B = \sqrt n\)。但是因为此题卡空间,所以块长可能要调大一些。

#include <bits/stdc++.h>
#define fi first
#define se second
#define eb(x) emplace_back(x)
#define pb(x) push_back(x)
#define lc(x) (tr[x].ls)
#define rc(x) (tr[x].rs)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ldb;
using pi = pair<int, int>;
const int N = 100005, M = 1005, MV = 105, V = 505;
int n, m, a[N];
struct Decompose{int B, Btot, L[M], R[M], bl[N];int val[MV][V][V];void build(){B = sqrt(n);Btot = (n + B - 1) / B;for(int i = 1; i <= Btot; i++){L[i] = (i - 1) * B + 1;R[i] = min(n, i * B);for(int j = L[i]; j <= R[i]; j++) bl[j] = i;}}void init(){for(int b = 1; b <= 500; b++){for(int i = 1; i <= Btot; i++){for(int j = L[i] + 1; j <= R[i]; j++){if(a[j] == a[j - 1]){val[i][b][0]++;continue;}if(abs(a[j] / b - a[j - 1] / b) >= 2) continue;int x = a[j - 1] % b, y = a[j] % b;if(a[j - 1] / b > a[j] / b){if(y > x){val[i][b][b - y]++;val[i][b][b - x]--;}}else if(a[j - 1] / b < a[j] / b){if(x > y){val[i][b][b - x]++;val[i][b][b - y]--;}}else{val[i][b][0]++;val[i][b][b - max(x, y)]--;val[i][b][b - min(x, y)]++;}}for(int j = 1; j < b; j++) val[i][b][j] += val[i][b][j - 1];}}}int query(int l, int r, int x, int y){int res = 0;if(bl[l] == bl[r]){for(int i = l + 1; i <= r; i++)res += ((a[i - 1] + x) / y == (a[i] + x) / y);return res;}for(int i = l + 1; i <= R[bl[l]]; i++)res += ((a[i - 1] + x) / y == (a[i] + x) / y);for(int i = L[bl[r]]; i <= r; i++)res += ((a[i - 1] + x) / y == (a[i] + x) / y);for(int i = bl[l] + 1; i < bl[r]; i++){res += val[i][y][x % y];res += ((a[L[i] - 1] + x) / y == (a[L[i]] + x) / y);}return res;}
}dc;
int main()
{//freopen("sample.in", "r", stdin);//freopen("sample.out", "w", stdout);ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> n >> m;for(int i = 1; i <= n; i++) cin >> a[i];dc.build();dc.init();int lastans = 0;for(int i = 1; i <= m; i++){int l, r, x, y;cin >> l >> r >> x >> y;l ^= lastans;r ^= lastans;x ^= lastans;y ^= lastans;lastans = dc.query(l, r, x, y);cout << lastans << "\n";}return 0;
}

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

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

相关文章

免费的企业网站cms百度指数明星人气榜

1、SpringCloud是什么&#xff1f; 1、 Spring Cloud是一系列框架的有序集合。它利用SpringBoot的开发便利性巧妙地简化了分布式系统基础设施的开发&#xff0c;如服务发现注册、配置中心、智能路由、消息总线、负载均衡、断路器、数据监控等&#xff0c;都可以用SpringBoot的…

网站目的及功能定位深圳网站优化哪家好

目录 101.RocketMQ的事务消息是如何实现的 102.为什么RocketMQ不使⽤Zookeeper作为注册中⼼呢&#xff1f; 103.RocketMQ的实现原理 104.RocketMQ为什么速度快 105.消息队列如何保证消息可靠传输 106.消息队列有哪些作⽤ 107.死信队列是什么&#xff1f;延时队列是什么&a…

2025 年最新推荐!小程序开发机构排行榜:覆盖定制开发 / 电商 / 预订 / 配送多场景优质服务商成都小程序开发/小程序定制开发/电商小程序开发/预订服务小程序开发公司推荐

在数字化转型浪潮下,小程序已成为政企打通线上服务、提升运营效率的关键工具,但其开发市场却乱象丛生。不少厂商以模板套用冒充定制开发,导致交付后功能与需求脱节、二次开发受阻;部分服务商技术迭代缓慢,开发的小…

CF280D k-Maximum Subsequence Sum 题解(线段树+反悔贪心维护k段最大子段和)

线段树维护区间最大子段和是好做的:每个节点维护当前最大子段和、从左端点开始的最大子段和、从右端点开始的最大子段和、当前节点的和。 这个题允许我们选择最多 \(k\) 段,于是我们可以考虑一个类似于反悔贪心的做法…

深圳网站优化公司哪家好wap建站程序合集

博客主页&#xff1a;誓则盟约系列专栏&#xff1a;IT竞赛 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 蓝桥第14场小白入门赛T1/T2/T3 题目&#xff1a; T1照常还是送分题无需多…

做网站要分几部分完成广东网站建设方便

一、项目介绍 在游乐场、商场、景区等人流量较大的地方&#xff0c;往往存在用户需要临时存放物品的情况&#xff0c;例如行李箱、外套、购物袋等。为了满足用户的储物需求&#xff0c;并提供更加便捷的服务体验&#xff0c;当前设计了一款物联网智能储物柜。 该智能储物柜通…

2025年微信小程序开发:趋势、最佳实践与AI整合 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

网站点击率怎么建西安做公司网站

STM32G4系列单片机&#xff0c;为32位的微控制器&#xff0c;理论上其内部寄存器地址最多支持4GB的命名及查找&#xff08;2的32次方&#xff0c;地址命名为0x00000000至0xFFFFFFFF&#xff09;。STM32官方对4GB的地址存储进行编号时&#xff0c;又分割成了8个block区域&#x…

网站有哪几种类型做网站 华普花园

会计学专业学什么 会计学专业属于工商管理学科下的一个二级学科&#xff0c;本专业培养具备财务、管理、经济、法律等方面的知识和能力&#xff0c;具有分析和解决财务、金融问题的基本能力&#xff0c;能在企、事业单位及政府部门从事会计实务以及教学、科研方面工作的工商管…

实验课1

实验1源代码1 #include<stdio.h> 2 int main() 3 { 4 printf(" o\n"); 5 printf("<H>\n"); 6 printf("I I\n"); 7 8 return 0; 9 } View Code运行…

做自我介绍的网站的图片素材怎么用动图做网站背景

Description Input 第一行为两个整数n, m。第二行有n个整数&#xff0c;为a1&#xff0c;a2, …, an。 Output 包含n行&#xff0c;每行m个1~nm的正整数&#xff0c;各不相同&#xff0c;以空格分开。如果有多解&#xff0c;输出任意一组解&#xff1b;如果无解&#xff0c;输出…

深入解析:【LeetCode 热题100】回溯:括号生成 组合总和(力扣22 / 39 )(Go语言版)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

完整教程:基于 COM 的 XML 解析技术(MSXML) 的总结

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

asp网站开发需要什么网站建设 企业文化

来源&#xff1a;ScienceAI编辑&#xff1a;萝卜皮人类的大部分细胞中&#xff0c;每时每刻都在进行着各种复杂的转录过程&#xff1b;这一过程与后续的蛋白质合成息息相关&#xff0c;从而会影响人体中各类酶、抗体、激素、免疫因子等生物分子的产生&#xff0c;最终影响人的身…

详细介绍:Windows如何定制键盘按键

详细介绍:Windows如何定制键盘按键pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco…

台州网站建设系统江苏网站建设电话

要搭建一个标准的测量系统,需要考虑以下几个方面: 确定测量目的和需求:首先需要明确测量的目的和需求,例如测量长度、重量、体积等。同时需要考虑测量的精度和误差范围,以及测量系统的适用范围和条件等。选择合适的传感器:根据测量目的和需求,选择合适的传感器类型,例如…

TheHackersLabs Templo writeup

信息收集 nmap获取userFlag 去web看一下web上只有一个默认的index.html,通过gobuster扫一下目录 gobuster dir -u http://192.168.43.208/ -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt 有一个w…

卖花网站模板太原网站优化培训

1.rpm文件: 1.1安装rpm文件: rpm -ivh kde-select.rpm23 #--nodeps强制安装,无视环境缺少依赖的检查 rpm -ivh --nodeps kde-select.rpm #--force --replacefiles可以无视rpm的冲突去强制替换(如两个rpm的安装路径相同了会有冲突) rpm -ivh --nodeps --force --replacef…

深入解析:Oracle、PostgreSQL 与 MySQL 数据库对比分析与实践指南

深入解析:Oracle、PostgreSQL 与 MySQL 数据库对比分析与实践指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "…