洛谷P4175 - [CTSC2008]网络管理

Portal

Description

给出一棵\(n(n\leq8\times10^4)\)个点的带点权的树,进行\(m(m\leq8\times10^4)\)次操作,操作有两种:

  • 修改一个点的点权。
  • 询问路径\((u,v)\)上第\(k\)大的点权。若路径上的点不足\(k\)个输出invalid request!。

Solution

带修改的可持久化线段树。
首先对于每个节点\(u\)建立一棵线段树记录路径\((u,rt)\)上的权值分布。考虑修改一个点的权值对这些线段树有什么影响。当\(u\)的权值由\(val\)变为\(val'\)后,子树\(u\)中的所有点的线段树中都有\(cnt[val]-1,cnt[val']+1\)。
对每个点再建立一棵线段树记录修改。修改子树在DFS序上相当于修改区间,差分后变为两个单点修改。于是我们要对于这些线段树进行单点修改,前缀查询;而这可以用树状数组实现。于是我们按DFS序建立树状数组套线段树就可以维护修改带来的影响。当我们需要求路径\((u,rt)\)上的权值分布时,用原线段树加上修改线段树即可。

时间复杂度\(O(mlog^3n)\)。

Code

//[CTSC2008]网络管理
#include <algorithm>
#include <cstdio>
#include <vector>
using namespace std;
inline char gc()
{
    static char now[1<<16],*s,*t;
    if(s==t) {t=(s=now)+fread(now,1,1<<16,stdin); if(s==t) return EOF;}
    return *s++;
}
inline int read()
{
    int x=0; char ch=gc();
    while(ch<'0'||'9'<ch) ch=gc();
    while('0'<=ch&&ch<='9') x=x*10+ch-'0',ch=gc();
    return x;
}
const int N=8e4+10;
int n,m,w[N];
struct optR{int k,u,v;} seq[N];
int wCnt,map[N<<1];
void discrete()
{
    int cnt=0;
    for(int i=1;i<=n;i++) map[++cnt]=w[i];
    for(int i=1;i<=m;i++) if(seq[i].k==0) map[++cnt]=seq[i].v;
    sort(map+1,map+cnt+1); wCnt=unique(map+1,map+cnt+1)-map-1;
    for(int i=1;i<=n;i++) w[i]=lower_bound(map+1,map+wCnt+1,w[i])-map;
    for(int i=1;i<=m;i++) if(seq[i].k==0) seq[i].v=lower_bound(map+1,map+wCnt+1,seq[i].v)-map;
}
const int N1=2e7;
int ndCnt,rt1[N],rt2[N],ch[N1][2],sum[N1];
void trAdd(int t,int x,int v);
int trSum(int t,int L,int R);
void ndCopy(int p,int q) {ch[q][0]=ch[p][0],ch[q][1]=ch[p][1],sum[q]=sum[p];}
void ins1(int &p,int L0,int R0,int x)
{
    ndCopy(p,++ndCnt); sum[p=ndCnt]++;
    if(L0==R0) return;
    int mid=L0+R0>>1;
    if(x<=mid) ins1(ch[p][0],L0,mid,x);
    else ins1(ch[p][1],mid+1,R0,x);
}
int t1,t2,t3,t4;
int query1(int p1,int p2,int p3,int p4,int L0,int R0,int k)
{
    if(L0==R0) return map[L0];
    int mid=L0+R0>>1,sumL=0;
    sumL+=sum[ch[p1][0]]+trSum(t1,L0,mid)+sum[ch[p2][0]]+trSum(t2,L0,mid);
    sumL-=sum[ch[p3][0]]+trSum(t3,L0,mid)+sum[ch[p4][0]]+trSum(t4,L0,mid);
    if(sumL>=k) return query1(ch[p1][0],ch[p2][0],ch[p3][0],ch[p4][0],L0,mid,k);
    else return query1(ch[p1][1],ch[p2][1],ch[p3][1],ch[p4][1],mid+1,R0,k-sumL);
}
void ins2(int &p,int L0,int R0,int x,int v)
{
    if(!p) p=++ndCnt; sum[p]+=v;
    if(L0==R0) return;
    int mid=L0+R0>>1;
    if(x<=mid) ins2(ch[p][0],L0,mid,x,v);
    else ins2(ch[p][1],mid+1,R0,x,v);
}
int query2(int p,int L0,int R0,int optL,int optR)
{
    if(optL<=L0&&R0<=optR) return sum[p];
    int mid=L0+R0>>1,r=0;
    if(optL<=mid) r+=query2(ch[p][0],L0,mid,optL,optR);
    if(mid<optR) r+=query2(ch[p][1],mid+1,R0,optL,optR);
    return r;
}
void trAdd(int t,int x,int v) {while(t<=n) ins2(rt2[t],1,wCnt,x,v),t+=t&(-t);}
int trSum(int t,int L,int R)
{
    int r=0;
    while(t) r+=query2(rt2[t],1,wCnt,L,R),t-=t&(-t);
    return r;
}
vector<int> ed[N];
void edAdd(int u,int v) {ed[u].push_back(v),ed[v].push_back(u);}
int fa[N][20],dpt[N]; int dfCnt,fr[N],to[N];
void dfs(int u)
{
    fr[u]=++dfCnt;
    ins1(rt1[u]=rt1[fa[u][0]],1,wCnt,w[u]);
    for(int k=1;fa[u][k-1];k++) fa[u][k]=fa[fa[u][k-1]][k-1];
    for(int i=0;i<ed[u].size();i++)
    {
        int v=ed[u][i];
        if(v==fa[u][0]) continue;
        fa[v][0]=u,dpt[v]=dpt[u]+1;
        dfs(v);
    }
    to[u]=dfCnt;
}
int lca(int u,int v)
{
    if(dpt[u]<dpt[v]) swap(u,v);
    for(int k=17;k>=0;k--) if(dpt[fa[u][k]]>=dpt[v]) u=fa[u][k];
    if(u==v) return u;
    for(int k=17;k>=0;k--) if(fa[u][k]!=fa[v][k]) u=fa[u][k],v=fa[v][k];
    return fa[u][0];
}
int main()
{
    n=read(),m=read();
    for(int i=1;i<=n;i++) w[i]=read();
    for(int i=1;i<=n-1;i++) edAdd(read(),read());
    for(int i=1;i<=m;i++) seq[i].k=read(),seq[i].u=read(),seq[i].v=read();
    discrete();
    dpt[1]=1,dfs(1);
    for(int i=1;i<=m;i++)
    {
        int k=seq[i].k,u=seq[i].u,v=seq[i].v;
        if(k==0)
        {
            trAdd(fr[u],w[u],-1),trAdd(to[u]+1,w[u],1);
            w[u]=v; trAdd(fr[u],v,1),trAdd(to[u]+1,v,-1);
        }
        else
        {
            int u1=lca(u,v),v1=fa[u1][0],sum1=0;
            t1=fr[u],t2=fr[v],t3=fr[u1],t4=fr[v1];
            sum1+=sum[rt1[u]]+trSum(t1,1,wCnt)+sum[rt1[v]]+trSum(t2,1,wCnt);
            sum1-=sum[rt1[u1]]+trSum(t3,1,wCnt)+sum[rt1[v1]]+trSum(t4,1,wCnt);
            if(sum1<k) puts("invalid request!");
            else printf("%d\n",query1(rt1[u],rt1[v],rt1[u1],rt1[v1],1,wCnt,sum1-k+1));
        }
    }
    return 0;
}

P.S.

姑且是把之前鸽了的题解都补完了...

转载于:https://www.cnblogs.com/VisJiao/p/LgP4175.html

Win7时间修复(时间错误修复文件) 运行方法:解压后运行reg文件即可。 支持的Win7版本: 1. Windows 7 Starter(入门版 / 初级版) 2. Windows 7 Home Basic(家庭普通版) 3. Windows 7 Home Premium(家庭高级版) 4. Windows 7 Professional(专业版) 5. Windows 7 Enterprise(企业版) 6. Windows 7 Ultimate(旗舰版) 7. Windows 7 Professional for Embedded Systems(嵌入式专业版) 8. Windows 7 Ultimate for Embedded Systems(嵌入式旗舰版) 立即下载

相关推荐

科技中介服务机构想要提升服务效率,需要哪些数智工具支持?.docx

科技中介服务机构想要提升服务效率,需要哪些数智工具支持?

洛谷 P4175 [CTSC2008]网络管理 解题报告

P4175 [CTSC2008]网络管理 题目描述 带修改树上链的第\(k\)大 输入输出格式 输入格式: 第一行为两个整数\(N\)和\(Q\),分别表示路由器总数和询问的总数。 第二行有\(N\)个整数,第\(i\)个数表示编号为\(i\)的路由器初始的数据延迟时间\(T_i\)。 紧接着\(N-1\)行,每行包含两个整数\(x\)和\(y\)。表示有一条光缆连接路由器\(x\)和路由器\(y...

weixin_30606669的博客 154

usb 扩容盘检测修复工具源码,编译产物

usb 扩容盘检测修复工具源码,编译产物

P4175 [CTSC2008] 网络管理 Solution

LG P4175 Sol

pystraf的博客 939

融合UWB和IMU割草机定位EKF研究(Matlab代码实现)

内容概要:本文主要介绍了一个名为“Plecs全桥LLC谐振变换器仿真模型”的技术资源,该资源聚焦于电力电子领域中的LLC谐振变换器建模与仿真,涵盖开环、闭环控制、软启动设计及参数优化等核心内容。文档不仅提供了LLC变换器的详细建模方法与仿真案例,还系统梳理了其在高效电源转换系统中的应用,包括隔离型全桥拓扑结构的设计与性能分析。此外,资源汇总了大量Matlab/Simulink仿真模型及相关科研方向,涉及新能源并网、储能控制、电机驱动等多个前沿领域,全面展示LLC谐振变换器在现代电力系统中的关键技术实现路径。同时,文档附带多种学习资料获取途径,如网盘链接和公众号资源,便于研究人员深入实践与拓展研究。; 适合人群:具备扎实的电力电子、自动控制理论基础,从事新能源发电、开关电源设计、电力系统仿真等相关领域的研究生、工程师及科研人员。; 使用场景及目标:①深入理解LLC谐振变换器的工作原理、建模方法与控制策略;②开展电力电子变换器的仿真验证与参数优化设计;③支撑科研项目、学位论文或工程项目的系统仿真与方案验证; 阅读建议:建议结合所提供的仿真模型与参考文献,使用Plecs或Simulink软件进行动手实践,重点掌握LLC谐振变换器的建模流程、闭环控制设计、软启动机制及参数调试技巧,以全面提升在实际工程中的应用与创新能力。

基于变频控制的多相交错LLC谐振变换器闭环仿真(Simulink仿真实现)

基于变频控制的多相交错LLC谐振变换器闭环仿真(Simulink仿真实现)内容概要:本文主要介绍了基于Plecs的全桥LLC谐振变换器仿真模型,涵盖变频控制下的多相交错LLC谐振变换器闭环仿真、V2G电动汽车ACDC整流与双向CLLC谐振变换器充放电仿真、LLC谐振变换器的开环与闭环软启动设计,以及储能系统中双向Buck-Boost变换器结合模型预测电流控制和电压下垂控制的仿真研究。同时,文档列举了多种电力电子系统与控制策略的Simulink/Plecs仿真案例,涉及三相交错并联Buck变换器、三电平Buck直流变换器、单相Boost PFC电路等,展示了丰富的电力变换器建模与控制技术。此外,还包括参数设计报告、计算书及相关参考文献,适用于从事电力电子、新能源发电、电动汽车充放电系统等领域的研究人员和技术开发人员。; 适合人群:具备电力电子、自动控制理论基础,从事新能源、电动汽车、电力系统等相关领域研究的研发人员、高校研究生及高年级本科生。; 使用场景及目标:① 学习和掌握LLC谐振变换器及其他典型电力电子变换器的工作原理与建模方法;② 实现闭环控制策略如变频控制、软启动、模型预测控制、下垂控制等的仿真验证;③ 支持科研项目、毕业设计或工程开发中的系统仿真与优化设计。; 阅读建议:建议结合文中提供的仿真模型、设计报告与参考文献,逐步搭建并调试相应系统,重点关注控制策略的实现细节与参数整定过程,以深入理解系统动态响应特性与控制性能。

洛谷 P4175: bzoj 1146: [CTSC2008]网络管理

令人抓狂的整体二分题。根本原因还是我太菜了。 在学校写了一个下午写得头晕,回家里重写了一遍,一个小时就写完了……不过还是太慢。 题目传送门:洛谷P4175。 题意简述: 一棵 \(n\) 个结点的树,每个点有点权。 有 \(m\) 次操作,每个操作要么是更改单点点权,要么是查询树链上第 \(k\) 大点权。 题解: 树套树固然可以,但是整体二分也很好。 整体二分就是对于所有的询问一起二分...

weixin_30562507的博客 124

独立储能的现货电能量与调频辅助服务市场出清协调机制(Matlab代码实现)

内容概要:本文标题为“Plecs全桥LLC谐振变换器仿真模型”,但实际内容严重偏离主题,文档中混杂了大量来自优快云博客平台的无关信息,涵盖多个不同领域的Matlab/Simulink仿真项目,如电力系统优化、无人机路径规划、机器学习预测、微电网调度、卡尔曼滤波、无线能量传输等,导致核心内容缺失。文档未能提供关于Plecs平台下全桥LLC谐振变换器的建模方法、电路结构、参数设计、控制策略或仿真结果等关键技术细节,实质信息与标题完全不符,不具备作为该主题参考资料的有效性。; 适合人群:从事电力电子变换器研究、电源系统设计及相关领域的工程师、高校研究生与科研人员,尤其是希望掌握LLC谐振变换器建模与仿真的专业技术人员。; 使用场景及目标:① 学习并掌握全桥LLC谐振变换器的工作原理与Plecs仿真建模技术;② 开展高效电源转换器的研发与性能优化;③ 作为教学或科研项目中电力电子电路仿真的参考资料。; 阅读建议:鉴于文档内容与标题严重不符,建议读者谨慎甄别,优先选择专业书籍、学术论文或官方仿真软件教程等权威资源进行学习,避免被无效信息误导。

P4175 [CTSC2008]网络管理

题目大意 给出一棵树,每个点有一个权值,支持查询树链上第 kkk 大数和单点修改. 分析 先把修改操作去掉开始(题目),不带修改树链第 kkk 大,要查询第 kkk 大就很容易想到用一些数据结构维护(废话),例如权值线段树,平衡树等等. 先从一个看似不相关的问题开始考虑,计算一条树链上所有数的和需要怎么办? 很显然这个东西可以树剖一下,再用前缀和优化,可以做到 O(log2N)\mathcal{O...

sxy__orz的博客 284

工业界实战:小红书推荐系统中的AB测试策略解析——分层、Holdout与反转实验

本文深入解析了小红书推荐系统在工业界实践中采用的AB测试核心策略。重点阐述了分层实验如何解决多实验并行与干扰问题,Holdout机制如何作为评估黄金标准提供稳定基准,以及反转实验如何作为全量上线后的终极安全网进行风险控制。这些策略共同构成了科学、严谨的线上评估体系,是保障推荐系统迭代效果与决策质量的关键。

transformer2023的博客 477

FPGA远程升级避坑指南:用AXI Quad SPI IP读写N25Q128 Flash的完整流程

本文详细介绍了FPGA远程升级过程中使用AXI Quad SPI IP读写N25Q128 Flash的完整流程,包括IP核配置、Flash操作指令集、双镜像备份设计及生产级远程升级协议。通过最佳实践和避坑策略,帮助开发者实现可靠的镜像更新方案,提升系统可靠性和可维护性。

weixin_30542079的博客 674

P4175 [CTSC2008]网络管理(整体二分)

P4175 [CTSC2008]网络管理 给定一棵有nnn个节点的树,点有点权,有两种操作:① 修改某个点的点权,② 查询两点路径间的点权第kkk大。 给定u,vu, vu,v,选定111号节点为根节点,设inf(x)inf(x)inf(x)表示从根节点到点xxx的信息,两点间的信息可以描述为inf(u)+inf(v)−inf(lca(u,v))−fa(inf(lca(u,v)))inf(u) + inf(v) - inf(lca(u, v)) - fa(inf(lca(u, v)))inf(u)+inf(

lifehappy 325

RT-2(robotics-transformer2)论文--阅读笔记

谷歌RT-2机器人论文的阅读笔记。

weixin_61255639的博客 1828

洛谷P4175 [CTSC2008]网络管理Network

题目描述M公司是一个非常庞大的跨国公司,在许多国家都设有它的下属分支机构或部门。为了让分布在世界各地的N个部门之间协同工作,公司搭建了一个连接整个公司的通信网络。该网络的结构由N个路由器和N-1条高速光缆组成。每个部门都有一个专属的路由器,部门局域网内的所有机器都联向这个路由器,然后再通过这个通信子网与其他部门进行通信联络。该网络结构保证网络中的任意两个路由器之间都存在一条直接或间接路径以进行通信...

呆头呆脑没有烦恼 314

告别手动复制粘贴!用Python脚本+pywinauto实现PC微信消息自动发送(附完整源码)

本文详细介绍了如何利用Python和pywinauto实现PC微信消息的自动化发送,告别繁琐的手动操作。从环境搭建、UI控件定位到构建健壮的发送流程,再到高级功能扩展和项目打包部署,全面解析了自动化办公的实现方案,显著提升工作效率。

weixin_30315723的博客 585

word 2013 长篇文档排版案例教程

office 2013 制作长文格式模板

1万+

【LG4175】[CTSC2008]网络管理

【LG4175】[CTSC2008]网络管理 题面 洛谷 题解 感觉就和普通的整体二分差不太多啊。。。 树上修改就按时间添加,用树状数组维护一下即可 代码 #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath&gt...

254

Android 13 灭屏音乐播放问题解决与优化建议

通过在中增加对音乐播放状态的检测,我们成功解决了客户应用在灭屏状态下音乐播放被中断的问题。

m0_60898338的博客 1157

BZOJ1146: [CTSC2008]网络管理Network

。。。我居然调试了一个下午  因为一个else 一个if。。。。 果然自己太弱 听Claris说这一题可以转化为DFS序然后容斥可以直接变成logn*logn*n 只能膜拜 我的是logn*logn*logn*logn*n 然后Jrmz说,这还不如暴力。。。。。 反正就是很普通的一道树剖  然后在链上找k大值用树套树  由于只会外层线段树维护区间的写法  于是就打了3个log的 #in

Don't fake it till you made it 2376

高通SDX55平台:5G速率问题排查分析方法

和大家分享一下高通5G平台5G速率问题排查分析方法。

四儿家的小祖宗的博客 5220

华为OD机试真题 新系统2026-04-01 C++ 实现【计算数列位置N的值】

如果其前面的M个元素中,存在值相同的元素,则该位置上的数值等于前面M个数中最大的数值与最小的数值之如果其前面的M个元素中,不存在值相同的元素,则该位置上的数值等于前面M个数中最大的数值与最小的数值之差;1、输入M、N两个数,则按照以下规则形成一个数列;两个整数,用逗号分割,分别表示M和N。一个整数,表示数列第N个位置上的数值。2、数列的前M个元素的值为1到M;请计算该数列第N个位置上的数值。N取值范围:1<= N<=50。M取值范围:3<=M<=10。

MISAYAONE的博客 1156

【BZOJ 1146】 [CTSC2008]网络管理Network

【BZOJ 1146】 [CTSC2008]网络管理Network 树链剖分+线段树套平衡树(treap)~

Regina8023 1630

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

P4175 [CTSC2008]网络管理 (动态树上第k大)

题目链接: P4175 [CTSC2008]网络管理 大致题意 给定一棵有nnn个节点的树, 节点上有权值wiw_iwi​. 有mmm次操作. 0 a b 表示把节点aaa的权值修改为bbb. 即: wa=bw_a = bwa​=b k a b 查询(a,b)(a, b)(a,b)最短路径上, 第kkk大的值. 解题思路 ➡️静态树上第kkk小⬅️点这里 如果没有做过这个题的静态版本, ⬆️推荐博客⬆️. 下文讲解也会基于上述博客. 很多静态树上第kkk小的做法也都适用于本题, 可以参考上述博客, 本文只

Fau的博客 502

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

上一篇: POJ2888 - Magic Bracelet
下一篇: LibreOJ2097 - 「CQOI2015」任务查询系统
ayw1069
博客等级 码龄11年 4粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值