首页 > 其他分享 >CSP模拟赛 #43

CSP模拟赛 #43

时间:2024-10-23 20:02:16浏览次数:1  
标签:dots 10 le 路径 个数 43 mathcal CSP 模拟

A

一棵树,每次加入一条路径,或者查询一条给定路径包含的路径个数。

\(n,m,q\le 10^5\)

矩形加法,单调查询,三维偏序,cdq 分治。

B

一棵树,有 \(n+1\) 层,第 \(i\) 层有 \(i\) 个点。对于第 \(i(1\le i\le n)\) 层,点的编号分别为 \(\frac{i(i - 1)}2 + 1 \sim \frac {i(i + 1)}2\),该层的第 \(a_i\) 个点有两个儿子,其他点仅有一个儿子。\(q\) 次查询两个点的 LCA,强制在线。

\(n\le 2\times 10^5\)

二度点可缩,考虑只保留所有叶子和三度点,这样树的点的个数为 \(\mathcal O(n)\)。思考如何找到一个点往下延伸到的第一个三度点或叶子,考虑从 \(i = n\dots 1\),维护 \(b_i\) 表示第 \(i\) 个位置的点是否存在。每次找到 \(b\) 中第 \(a_i\) 和 \(a_i + 1\) 个 \(1\) 的位置 \(x,y\),令 \(b_y\gets 0\),并记录 \(c_i\) 表示第 \(i\) 个位置的点的编号。每次找到处理了 \(i...n\) 后的第几个 \(1\) 即可,强制在线可以用主席树。

C

给定序列 \(a\),你需要把 \(a\) 打乱。排序一:多次交换任意两个数;排序二:多次交换相邻两个数。一个序列合法当且仅当排序一和排序二的最小操作次数相同,求可以得到的本质不同的打乱后的合法序列个数。

\(n\le 10^6\)

考虑 \(a\) 中的数互不相同该怎么做。排列由若干环组成,一个环一定是排列上的一段区间。

考虑单个环,逆序对数一定 \(\ge n - 1\)。一个结论:一个环 \(p_{1,2,\dots, n}\) 中,若逆序对等于 \(n - 1\),则 \(1\to n\) 这条路径上所有点编号递增,\(n\to 1\) 这条路径上所有点编号递减。

证明
  • 充分性:令 \(1\to n\) 路径上的点以及 \(1\) 号点属于递增链,\(n\to 1\) 路径上的点以及 \(n\) 号属于递减链。找到第一个 \(x\) 满足 \(x\) 在递增链上,\(x + 1\) 在递减链上,交换 \(p_x\) 和 \(p_{x + 1}\) 即可划分为两个结构相同的环。

  • 必要性:归纳证明。对于一个合法的环,找到第一个可行的操作位置 \(x\),交换 \(p_x\) 和 \(p_{x+1}\) 得到 \(p'_{1\dots n}\)。由于合法性,两个环分别为 \(1\dots x\) 和 \(x + 1\dots n\)。已证明大小为 \(x\) 和 \(n - x\) 的环满足对应结构,那么交换 \(p'_x\) 和 \(p'_{x + 1}\) 得到的 \(p\) 应为:\(1\dots x\) 的递增链接上 \(x + 1\dots n\) 的递增链,然后 \(x + 1\dots n\) 的递减链接上 \(1\dots x\) 的递减链。接完后,满足对应结构。

考虑 \(a\) 中存在相同的数,相同的数按照位置从小到大离散化,形成一个排列。如果相同的数处于同一个环中一定不合法,因为排序一可以不把所有点都操作一元环。发现加上这个条件之后,条件就充要了,剩下的直接简单 dp 即可。

  • 启示:大胆猜结论;证明中的充分性和必要性。

D

一棵树,多次询问。每次给定一条路径 ,求到达这条路径的距离 \(\le d\) 的点的个数。

\(n, q\le 2\times 10^5\)

考虑树链剖分,一条路径划分为若干条链。

设 \(f_{u, k}\) 表示 \(u\) 子树内距离 \(\le k\) 的点的个数,\(g_{u, k}\) 表示 \(u\) 子树内轻儿子子树中距离 \(\le k\) 的点的个数。

对于 \(\text{lca}(u,v)\),我们需要求子树外的点的个数,可以用点分治求得距离该点 \(\le d\) 的点的个数,减去 \(f_{u, d}\)。

对于每条链,相当于求这条链上所有点的 \(g_{\_, d}\)。对于每条链的最后一个点 \(x\),需要加上 \(f_{son(x), d - 1}\),减去下一个点 \(nxt\) 的 \(f_{nxt, d - 1}\)。

我们现在的问题是:\(\mathcal O(q\log n)\) 次单点查询 \(f\),\(\mathcal O(q\log n)\) 次查询一个点 \(x\) 到其重链根的所有 \(g_{y, d}\)。

对于 \(f\),可以离线长链剖分。

对于 \(g\),考虑暴力加入所有轻子树信息,发现 \(\le d\) 的点的个数相当于总点数减去距离恰好为 \(d + 1\) 的点的子树和。

时间复杂度 \(\mathcal O((n + q)\log n)\)。

标签:dots,10,le,路径,个数,43,mathcal,CSP,模拟
From: https://www.cnblogs.com/Sktn0089/p/18498235

相关文章

  • 2024/10/23 模拟赛总结
    \(100+55+30+0=185\),T4没有-1唐完了#A.GCD把\(1\sim50\)的\(f\)打表输出,可以找到规律:若\(x\)为\(p^k(k\in\mathbb{N}^+,p\in\mathcal{P})\),则\(f(x)=p\),否则\(f(x)=1\)于是可以筛出所有质数并枚举指数//BLuemoon_#include<bits/stdc++.h>usingnamespaces......
  • 基于毕奥-萨伐尔定律的交流电机的4极旋转磁场matlab模拟与仿真
    1.课题概述基于毕奥-萨伐尔定律的交流电机的4极旋转磁场,对比不同定子半径,对比2级旋转磁场。 2.系统仿真结果 3.核心程序与模型版本:MATLAB2022a%合并位置和电流P=[xaxa_xbxb_xcxc_];I=[IaIa_IbIb_IcIc_];index=1;%初始化索引%......
  • P4342
    又角果,唐#include<bits/stdc++.h>usingnamespacestd;constintinf=0x3f3f3f3f;intn,ans=-inf;inta[105];intf[150][150],g[150][150];charc[105];intmax(intx,inty){return(x>y)?(x):(y);}intmin(intx,inty){return(x<y)?(x):(y);}intmain......
  • 信息学奥赛复赛复习20-CSP-S2019-01格雷码-数据类型范围、unsigned 关键字、无符号范
    PDF文档回复:202410231P5657[CSP-S2019]格雷码[题目描述]通常,人们习惯将所有n位二进制串按照字典序排列,例如所有2位二进制串按字典序从小到大排列为:00,01,10,11。格雷码(GrayCode)是一种特殊的nn位二进制串排列法,它要求相邻的两个二进制串间恰好有一位不同,特别地......
  • 信息学奥赛复赛复习20-CSP-S2019-01格雷码-数据类型范围、unsigned 关键字、无符号范
    PDF文档公众号回复关键字:202410231P5657[CSP-S2019]格雷码[题目描述]通常,人们习惯将所有n位二进制串按照字典序排列,例如所有2位二进制串按字典序从小到大排列为:00,01,10,11。格雷码(GrayCode)是一种特殊的nn位二进制串排列法,它要求相邻的两个二进制串间恰好有一位不同......
  • 2024/10/22 模拟赛小记
    A.日期速算_date题意:给你一个日期,然后问k天之后日期。形式如“20240229”。保证年份在2000-9999年。看榜的时候发现挂掉了,有点迷惑。发现思路没什么问题。把cin,cout改成scanf和printf就过了。。?。什么oj特色。Code#include<bits/stdc++.h>usingnamespacest......
  • [CSP-S2020] VP
    【比赛地址】省流:\(100+100+70+55\to100+100+70+0,325\to270\)[CSP-S2020]儒略日乱搞。这道题太恶心了,场上用了\(1h\)才做出来。代码过于抽象,不放了。[CSP-S2020]动物园非常简单的黄题。#include<bits/stdc++.h>usingnamespacestd;unsignedlonglongn,m,c,k......
  • P7909 [CSP-J 2021] 分糖果
    结论题题面概括请在$[l,r]$中找出一个数$k$,使得$n$%$k$的值最大.思路当$n\le10^9$时,说明$\Theta(n)$的算法已经结束了.所以,接下来是结论推理.当$\left\lfloor\frac{l}{n}\right\rfloor=\left\lfloor\frac{r}{n}\right\rfloor$时,$r$%$n$的......
  • P7910 [CSP-J 2021] 插入排序 题解
    正解首先要注意$2$点:修改数组元素的值会影响接下来的操作.对数组进行排序不会影响接下来的操作.思路直接扫一遍数组.假设排序后$a_x$会在第$p$位上.将$p$初始化为$n$.然后就开始找$x$前后有多少个小于$a_x$的值就行了.时间复杂度:$\Theta(nq)$.注意......
  • P7911 [CSP-J 2021] 网络连接 题解
    模拟代码#include<iostream>#include<cstdio>#include<cstring>usingnamespacestd;intn,p=1,ans[1003];//没事干的ans数组structnode{ stringop,ad;}a[1003];intws(intn){//位数 intsum=0; if(n==0)return1; while(n){ n......