莫队2 这次需要带修改了

news/2024/12/13 1:37:56/文章来源:https://www.cnblogs.com/defad-ak-ioi/p/18603808

莫队2 这次需要带修改了

莫队1 走上骗分之路

实现修改

莫队是不支持修改的, 但是有后人加以改进, 就有了代修版本.

我们现在有一个东西叫时间轴 (类似函数式线段树的每个根都是关于某次之前的根修改或查询的), 每次询问都记录一下当前的时间轴, 每次修改都在时间轴上新建一个版本.

typedef struct _qryy {int l, r;int t, i;
} qryy;

这次要可以 \(O(1)\)\(([l, r], t)\) 扩展到 \(([l \pm 1, r], t)\), \(([l, r \pm 1], t)\)\(([l, r], t \pm 1)\).

现在的排序第一关键字是 \(l\) 所在的块, 第二关键字是 \(r\), 第三关键字是 \(t\).

然后在记录修改的位置和值.

typedef struct _updd {int x, k;
} updd;

这次举例单点修区间和

1 x k \(a_{x} := a_{x} + k\)
2 x y\(\displaystyle \sum_{i \in [x, y]} a_{i}\)

树状数组1.

显然这是树状数组/线段树板子, 但是我们还是在讨论莫队.

VJudge LuoGu

由于莫队本身复杂度玄学, Defad只得到了 70 分, 当然也可能是Defad在分块时分的不够好或各种玄学优化不会, 得分比Defad高可以在评论区发一下您怎么优化的.

int cmp(const void *a, const void *b) {qryy *x = (qryy*)(a), *y = (qryy*)(b);if (pos[x->l] ^ pos[y->l]) {return x->l - y->l;} else if (pos[x->r] ^ pos[y->r]) {return pos[x->r] - pos[y->r];} else {return x->t - y->t;}
}void get_ans() {int l = 1, r = 0, t = 0;qsort(q + 1, cntq, sizeof(q[0]), cmp);f1 (i, 1, cntq, 1) {while (l < q[i].l) {s -= a[l] + upd[l];l++;}while (q[i].l < l) {l--;s += a[l] + upd[l];}while (r < q[i].r) {r++;s += a[r] + upd[r];}while (q[i].r < r) {s -= a[r] + upd[r];r--;}while (t < q[i].t) {t++;if (q[i].l <= c[t].x && c[t].x <= q[i].r) {s += c[t].k; // 更新 sum}upd[c[t].x] += c[t].k; // 版本前进}while (q[i].t < t) {if (q[i].l <= c[t].x && c[t].x <= q[i].r) {s -= c[t].k; // 更新 sum}upd[c[t].x] -= c[t].k; // 版本回退t--;}ans[q[i].i] = s;}
}

例题

VJudge LuoGu

例题也差不多, 但是单点赋值和单点加不同, 单点赋值可以给点值和修改值交换, 下次版本回退可以在换回来.

本题似乎块长开到 \(N^{\cfrac{2}{3}}\) 并且在排序时看 \(l\) 所在块和 \(r\) 所在块和 \(t\) 才可通过.

int cmp(const void *a, const void *b) {qryy *x = (qryy*)(a), *y = (qryy*)(b);if (pos[x->l] ^ pos[y->l]) {return x->l - y->l;
//} else if (x->r ^ y->r) { // 用这个相比下方的会TLE
//  return x->r - y->r;} else if (pos[x->r] ^ pos[y->r]) {return pos[x->r] - pos[y->r];} else {return x->t - y->t;}
}void get_ans() {int l = 1, r = 0, t = 0;qsort(q + 1, cntq, sizeof(q[0]), cmp);f1 (i, 1, cntq, 1) {while (l < q[i].l) {s -= (--clr[a[l++]] == 0);}while (q[i].l < l) {s += (++clr[a[--l]] == 1);}while (r < q[i].r) {s += (++clr[a[++r]] == 1);}while (q[i].r < r) {s -= (--clr[a[r--]] == 0);}while (t < q[i].t) {t++;if (q[i].l <= c[t].x && c[t].x <= q[i].r) {s -= (--clr[a[c[t].x]] == 0);s += (++clr[c[t].k] == 1);}c[t].k ^= a[c[t].x];a[c[t].x] ^= c[t].k;c[t].k ^= a[c[t].x];}while (q[i].t < t) {if (q[i].l <= c[t].x && c[t].x <= q[i].r) {s -= (--clr[a[c[t].x]] == 0);s += (++clr[c[t].k] == 1);}c[t].k ^= a[c[t].x];a[c[t].x] ^= c[t].k;c[t].k ^= a[c[t].x];t--;}ans[q[i].i] = s;}
}

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

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

相关文章

docker云部署自建知识库的ai微信机器人(易上手很详细)

docker云部署自建知识库的ai微信机器人(易上手很详细)hhyuuu9 月 22 日 北京 阅读 7 分钟11、前言 1.1、介绍 本次演示采用的是2核2g Ubunto系统,无内置镜像的华为云服务器推荐使用腾讯云轻量云服务器docker镜像,可以省去前面第二节步骤,如果还是境外服务器更方便了 1.2、注…

JMeter如何对文件下载功能进行测试

1、首先要明白的是,所谓的文件下载,在jmeter中是以数据流的形式存在,最终的响应数据也是数据流,而jmeter本身不具备将数据流转换成文件并保存到本地的功能,所以需要使用beanshell脚本来实现文件下载并本地本地。 2、右键线程组-添加-取样器-beanshell取样器(注意,beansh…

42. JavaScript变量、数据类型、运算符

1. JavaScript简介 JavaScript是由 ECMAScript 标准 + DOM + BOM 组成DOM --- document 指的是页面源码文档对象BOM --- browser 指的是浏览器对象 2. JavaScript基础 2.1 注释语法//这是单行注释/* 这是多行注释 这是多行注释 */2.2 书写方式 [1]在head或body标签内写script标…

ESP32-WIFI配网优化

前言 之前文章中有介绍过两种 WIFI 配网的方式,如果需要详细了解相关内容可以参考之前的文章: [[ESP32-两种有趣的wifi连接方式]],这里主要对于强制门户认证过程再进行优化和升级。 在强制门户认证中,在生成的网页中,WiFi 名称总是要自己输入,这里总感觉有一点麻烦,前段时…

Excel中使用VBA实现word邮件合并功能

Excel中使用VBA实现word邮件合并功能 代码为窗体程序样式如下:代码: Private Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpPa…

系统设计精髓

系统设计精髓-稳快灵🛡️ 『稳~高可用性』 ▫️通过冗余和故障转移技术,确保系统几乎无间断运行 ▪️适用于需要7x24小时不间断服务的业务,如云服务、在线交易平台,确保用户随时都能访问服务🚀『快~高吞吐量』 ▫️通过异步处理和负载均衡,提高系统处理请求…

11.20-12-12移动开发记录

数据库和AI调用NETMAUI 1、MySQL搭建 在我的服务器上完成MySQL搭建: [root ~]# mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is ??? Server version: 8.0.40 MySQL Community Server - GPLCop…

PCIe扫盲——PCI总线的地址空间分配

PCI总线具有32位数据/地址复用总线,所以其存储地址空间为2的32次方=4GB。也就是PCI上的所有设备共同映射到这4GB上,每个PCI设备占用唯一的一段PCI地址,以便于PCI总线统一寻址。每个PCI设备通过PCI寄存器中的基地址寄存器来指定映射的首地址。如下图所示:注:需要注意的是PC…

低空飞行管理服务监管系统建设方案

在低空经济蓬勃发展的今天,低空飞行活动日益频繁,对低空飞行的管理、服务和监管提出了更高的要求。一个高效、智能的低空飞行管理系统对于确保飞行安全、提升空域利用效率、推动低空经济发展具有重要意义。 1. 建设背景与目标随着无人机技术的进步和应用领域的拓展,低空飞行…

打开浏览器访问网页时,显示无法连接到代理服务器,解决方案

打开浏览器,访问任何网页都提示说检查代理服务器解决方案: 1、win+r打开运行窗口 2、输入inetcpl.cpl进入Internet属性界面3、选择连接-->局域网(LAN)设置4、点击局域网设置,将代理服务器的选框取消勾选5、再次访问网页,就可以正常访问了

SpringCloud Nacos (docker 搭建 项目运行) 基于 Cloud 2022 版本

一、使用docker 安装 nacos 基础镜像 1、安装docker(省略) 2、创建 docker-compose.yml version: 3.7services:nacos:image: nacos/nacos-server:latestcontainer_name: nacosenvironment:- MODE=standalone # 单机模式- PREFER_HOST_MODE=hostname # 使用主机名- NACOS_SE…