魔法少女LJJ 题解

推荐在 cnblogs 上阅读

魔法少女LJJ 题解

这题纯属就是迷惑题。。

为什么这么说?

注意数据范围:

对 100% 的数据 0 ≤ m ≤ 400000 0\leq m\leq400000 0m400000 c ≤ 7 c\leq 7 c7

c ≤ 7 c\leq 7 c7!!

这意味着根本没有删除操作。就连样例也是错的。

Solution

这题的各种操作,用并查集 + 线段树合并完成。

如果你是被题目数据范围晃飞的,建议先去想想怎么做。

先介绍一下线段树的节点:

struct node
{int ls,rs; // 左右儿子int num; // 数量double val; // log 值,这里后面会讲
}tr[N*20];

接下来分析一下各种操作:

  1. 新建一棵权值线段树, x x x 节点的 n u m + 1 num+1 num+1
  2. 并查集连接一下,合并这两个节点的线段树。
  3. 先查询得到 a a a 连通块内有多少比 x x x 小的点的数量 S S S;然后把这些小的区间清空;最后把 x x x 所在的点的信息更改为 S S S
  4. 类似操作 3。
  5. 基本操作了,二分查找树。
  6. log ⁡ ( a × b ) = log ⁡ a + log ⁡ b \log(a\times b)=\log a+\log b log(a×b)=loga+logb 发现,直接比较 log ⁡ \log log 值即可。这就是为什么节点信息中要储存一个 v a l val val
  7. 标准操作了,输出 n u m num num 即可。
#define int long long
#define db double
#define ls(x) tr[x].ls
#define rs(x) tr[x].rs
const int MAXN = 2e6 + 5;
int n, m, tmp, cnt, fa[MAXN], d[MAXN], rts[MAXN];
struct node
{int op, x, y;
} q[MAXN];
struct tree
{int ls, rs, num;bool tag;db val;
} tr[MAXN * 20];
int rk(int x)
{return lower_bound(d + 1, d + 1 + n, x) - d;
}
int find(int x)
{// 略
}
void pushup(int rt)
{tr[rt].num = tr[ls(rt)].num + tr[rs(rt)].num;tr[rt].val = tr[ls(rt)].val + tr[rs(rt)].val;
}
void pushdown(int rt)
{if (tr[rt].tag){tr[rt].tag = 0;tr[ls(rt)].num = tr[ls(rt)].val = 0, tr[ls(rt)].tag = 1;tr[rs(rt)].num = tr[rs(rt)].val = 0, tr[rs(rt)].tag = 1;}
}
void update(int &rt, int l, int r, int k, int x, db y)
{// 略
}
void merge(int &rt1, int rt2, int l, int r)
{// 略
}
int query(int rt, int l, int r, int lf, int rg)
{// 略
}
void clean(int rt, int l, int r, int lf, int rg)
{if (!rt || rg < lf)return;if (lf <= l && rg >= r){tr[rt].num = tr[rt].val = 0, tr[rt].tag = 1;return;}int mid = (l + r) >> 1;if (lf <= mid)clean(ls(rt), l, mid, lf, rg);if (rg > mid)clean(rs(rt), mid + 1, r, lf, rg);pushup(rt);return;
}
int ask(int rt, int l, int r, int k)
{// 略
}
signed main()
{ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);cin >> m;for (int i = 1; i <= m; i++){int op, x, y = 0;cin >> op >> x;if (op != 1 && op != 7)cin >> y;q[i] = (node){op, x, y};if (op == 3 || op == 4)d[++n] = y;if (op == 1)d[++n] = x;}sort(d + 1, d + 1 + n);n = unique(d + 1, d + 1 + n) - d - 1;for (int i = 1; i <= m; i++){int op = q[i].op, x = q[i].x, y = q[i].y;if (op == 1)update(rts[++tmp], 1, n, rk(x), 1, (db)log(x)), fa[tmp] = tmp;if (op == 2){int fx = find(x), fy = find(y);if (fx != fy){fa[fy] = fx;merge(rts[fx], rts[fy], 1, n);}}if (op == 3){int fx = find(x), k = rk(y);int sum = query(rts[fx], 1, n, 1, k - 1);clean(rts[fx], 1, n, 1, k - 1);update(rts[fx], 1, n, k, sum, sum * log(y));}if (op == 4){int fx = find(x), k = rk(y);int sum = query(rts[fx], 1, n, k + 1, n);clean(rts[fx], 1, n, k + 1, n);update(rts[fx], 1, n, k, sum, sum * log(y));}if (op == 5)printf("%lld\n", ask(rts[find(x)], 1, n, y));if (op == 6)puts(tr[rts[find(x)]].val > tr[rts[find(y)]].val ? "1" : "0");if (op == 7)printf("%lld\n", tr[rts[find(x)]].num);}return 0;
}

结尾

这道题告诉我们,读题一定要认真!!

本题考查并查集 + 线段树合并 + 读题仔细。

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

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

相关文章

Deepin基本环境查看(四)【硬盘/分区、文件系统、硬连接/软连接】

Linux操作系统(Deepin、Ubuntu&#xff09;操作系统中&#xff0c;硬盘分区的管理与Windows操作系统不同&#xff1b; 在Linux系统中维护着一个统一的文件目录体系&#xff0c;而硬盘和分区是以资源的形式由操作系统挂接和调度&#xff1b;此外Linux系统中连接&#xff08;硬连…

R语言【taxlist】——get_children(),get_parents():检索分类概念的子类群或父类群

Package taxlist version 0.2.4 Description 检索所查询分类单元概念的所有子概念或父概念。 Usage get_children(taxlist, ...)## S3 method for class taxlist get_children(taxlist, ConceptID, ...)get_parents(taxlist, ...)## S3 method for class taxlist get_parents…

NTFS 磁盘管理 :NTFS Disk by Omi NTFS

NTFS Disk by Omi NTFS是一款专为Mac系统设计的NTFS文件系统读写解决方案的工具。它可以帮助Mac用户方便地访问和管理NTFS格式的硬盘、U盘、移动硬盘以及其他存储设备&#xff0c;提供高效稳定的NTFS卷管理功能。 NTFS 磁盘管理 &#xff1a;NTFS Disk by Omi NTFS 该软件的主…

【榜单公布】2023年度征文活动已结束

经过为期一个月的热情参与&#xff0c;CSDN 2023年度征文活动正式落下帷幕&#xff01;那么今年又有哪些博主上榜了呢&#xff1f;一起来看下吧~~ 活动链接&#xff1a;https://activity.csdn.net/creatActivity?id10645 csdnid昵称链接qq_57761637鸽芷咕CSDN年度征文&#xf…

IDEA使用快捷键提炼函数(Extract Method)

IDEA使用快捷键提炼函数&#xff08;Extract Method&#xff09; 1、快捷键 ------ctrlaltM 2、右击操作--------选中待提炼代码 --> 右击 --> Refactor --> Extract --> Method. 3、举例 提炼前&#xff1a; public void printOwing(double amount) {printBa…

Mistral AI vs. Meta:顶级开源LLM比较

为了提高性能&#xff0c;大型语言模型(llm)通常会通过增加模型大小的方法来实现这个目标&#xff0c;但是模型大小的增加也增加了计算成本和推理延迟&#xff0c;增加了在实际场景中部署和使用llm的障碍。 Mistral AI是一家总部位于巴黎的欧洲公司&#xff0c;一直在研究如何…

QT基础篇(16)QT5单元测试框架

1.QTEstLib框架 QTestLib框架是一个用于软件测试的开源框架&#xff0c;是Qt工具套件的一部分。它提供了一组用于编写自动化测试和单元测试的类和函数。 QTestLib可以方便地为Qt应用程序编写单元测试&#xff0c;包括测试GUI和非GUI的代码。它提供了一系列断言和辅助函数&…

springboot自动配置的条件注解使用

1.ConditionalOnBean Configuration public class MyConfiguration {Beanpublic MyBean myBean() {return new MyBean();}BeanConditionalOnBean(MyBean.class)public AnotherBean anotherBean() {return new AnotherBean();} }在这个例子中&#xff1a; MyConfiguration 是一…

QT入门篇---无门槛学习

1.1 什么是 Qt Qt 是⼀个 跨平台的 C 图形⽤⼾界⾯应⽤程序框架 。它为应⽤程序开发者提供了建⽴艺术级图形界⾯所需的所有功能。它是完全⾯向对象的&#xff0c;很容易扩展。Qt 为开发者提供了⼀种基于组件的开发模式&#xff0c;开发者可以通过简单的拖拽和组合来实现复杂的…

车险到期提醒,快速查询交强险投保日期!

随着社会的进步和人们生活水平的提高&#xff0c;车辆已经成为人们出行的重要工具。而为了保障行车安全&#xff0c;车辆保险成为了必备的选择。交强险作为一种强制性的保险&#xff0c;其投保期限对车主来说尤为重要。本文将通过介绍一个API接口&#xff0c;帮助车主们快速查询…

安全合规之漏洞扫描的重要意义

随着信息技术的飞速发展&#xff0c;企业在日常运营中越来越依赖于网络和数字化系统。然而&#xff0c;随之而来的是网络安全威胁的不断增加&#xff0c;给企业的数据和运营带来了巨大的风险。为了保护企业的资产和数据&#xff0c;企业需要积极采取措施来确保网络的安全性和合…

图中点的层次——树与图的广度优先遍历

问题描述 代码实现 #include <cstring> #include <iostream> #include <algorithm>using namespace std;const int N 1e5 10;int n, m; int h[N], ne[N * 2], e[N * 2], idx; int d[N]; // 从节点1到当前节点的距离 int q[N * 2]; // 数组模拟队列void ad…

01-echarts如何绘制三维折线图

echarts如何绘制三维折线图 一、相关依赖包1、下载依赖2、引入依赖 二、创建图表盒子1、创建盒子2、定义数据3、编写方法1、初始化盒子2、设置配置项3、修改数据格式4、设置颜色数组4、设置name数组5、设置线三维和点三维6、添加配置项7、设置图表自适应 4、调用方法 三、整体代…

Unity 面试篇|(三)设计模式篇 【全面总结 | 持续更新 | 建议收藏】

目录 1. 什么是设计模式&#xff1f;2. 设计模式的七大原则&#xff1f;3. 单例模式4. 三类设计模式5. 什么是单例模式&#xff0c;适用场景以及优缺点&#xff1f;6. 什么是原型模式&#xff0c;适用场景以及优缺点&#xff1f;7. 什么是生成器模式&#xff0c;适用场景以及优…

低代码配置-小程序配置

数据结构 {"data": {"layout": {"api":{"pageApi":{//api详情}},"config":{"title":"页面标题"&#xff0c;},"listLayout": {"fields": [{"componentCode": "grid…

力扣经典题:链表合并

解决链表合并问题需要有特定的思路&#xff1a; 、链表合并 王赫辰/c语言 - Gitee.com 简述思路&#xff1a;首先先处理特殊情况&#xff0c;将空指针时的情况进行提前处理 然后再创建新的链表&#xff0c;此时使用尾插比较法&#xff1a; 循环条件&#xff1a;当两个链表中…

Boost 适用 filesystem 库,statx 函数无法找到引用问题的解决方案。

1、boost 高版本使用了 statx 函数&#xff0c;这个函数是在 Linux 内核版本 4.11 之后引入的。 所以&#xff1a;可以升级 Linux 内核版本到4.11之后即可。 2、降低 boost 库版本到 1.70 以下 3、正确的路&#xff0c;改 boost 的编译代码 先看这个&#xff1a; Filesyste…

甲基四嗪-PEG5-炔烃,Methyltetrazine-PEG5-alkyne,可以提高生物分子的稳定性和保存期

您好&#xff0c;欢迎来到新研之家 文章关键词&#xff1a;甲基四嗪五聚乙二醇炔&#xff0c;甲基四嗪-PEG5-炔烃&#xff0c;Methyltetrazine-PEG5-alkyne 一、基本信息 产品简介&#xff1a;Methyltetrazine PEG5 alkyne contains methyltetrazole and PEG5 chains, as we…

pyecharts模块的下载方法以及介绍,折线图的创立

目录 1.pyecharts是什么 2.pyecharts下载方法 1.在屏幕左下角搜索这里输入cmd&#xff0c;找到命令提示符并且打开 2.输入pip install pyecharts 然后回车进行下载 3.检查是否下载完成 4.另一个方法 3.pyecharts入门 4.pyecharts的配置选项 set_global_opts全局配置选…

有关Quick BI中Case子句中多次使用lod函数返回空值问题分析

一、Quick BI中的lod_ include函数 lod_ include {维度1[,维度2]...:聚合表达式[:过滤条件]} 作用&#xff1a;将表达式中的维度一起作为分组依据进行订算。其中&#xff0c; 1) 维度1[,维度2]... &#xff1a;声明维度&#xff0c;指定聚合表达式要连接到的一个或多个维…