SPOJ COT Count on a tree 树上第k小

手把手教你用Isograph Reliability Workbench 14.0绘制可靠性方框图(RBD) 本文详细介绍了如何使用Isograph Reliability Workbench 14.0绘制可靠性方框图(RBD),从软件安装、界面设置到基础项目创建和高级功能应用,手把手指导工程师完成系统可靠性分析。通过实际案例演示,帮助用户掌握RBD建模技巧,提升系统可靠性评估效率。 阅读详情

题目:给你一棵n个节点的树,每个节点有一个数,有m个询问,问a到b的路径上第k小的数

思路:每一棵线段数都在它的父节点的基础上修改,这样就形成了相对于根的前缀和,设a,b的最近公共祖先是c,c的父节点是d,那么答案就是a+b-c-d

#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<list>
#include<numeric>
using namespace std;
#define PI acos(-1.0)
#define LL long long
#define ULL unsigned long long
#define INF 0x3f3f3f3f
#define mm(a,b) memset(a,b,sizeof(a))
#define PP puts("*********************");
template<class T> T f_abs(T a){ return a > 0 ? a : -a; }
template<class T> T gcd(T a, T b){ return b ? gcd(b, a%b) : a; }
template<class T> T lcm(T a,T b){return a/gcd(a,b)*b;}
// 0x3f3f3f3f3f3f3f3f
// 0x3f3f3f3f

const int maxn=1e5+50;
const int maxe=maxn*2;
const int maxm=maxn*30;
int arr[maxn];//原数组
int num[2*maxn],siz;//num离散化之后的数组
int root[maxn],lson[maxm],rson[maxm],cnt[maxm];//根节点,左儿子,右儿子,区间内的数出现次数的前缀和
int tot;
//LCA部分
struct node{
    int u,v,w,next;
}edge[maxe];
int head[maxn],tol,total;
int order[maxn<<1],pos[maxn],dep[maxn],dis[maxn];
//oredr:dfs遍历的顺序,长度为2*n-1,下标从1开始
//pos[i]:表示点i在order中第一次出现的位置
int Log[maxn<<1],rmq[maxn<<1][20];
//结点从1开始
int fa[maxn];
void LcaInit(){
    mm(head,-1);
    tol=total=dep[1]=dis[1]=0;
}
void addedge(int u,int v,int w){
    edge[tol].u=u;
    edge[tol].v=v;
    edge[tol].w=w;
    edge[tol].next=head[u];
    head[u]=tol++;
}
void Dfs(int u,int f){
    pos[u]=++total;order[total]=u;
    fa[u]=f;
    for(int i=head[u];i!=-1;i=edge[i].next){
        int v=edge[i].v;
        if(v!=f){
            dep[v]=dep[u]+1;
            dis[v]=dis[u]+edge[i].w;
            Dfs(v,u);
            order[++total]=u;
        }
    }
}
void initLOG(){
    Log[0]=-1;
    for(int i=1;i<2*maxn;i++)
        Log[i]=(i&(i-1))?Log[i-1]:Log[i-1]+1;
}
void initRMQ(int n) {
    for(int i=1;i<=n;i++) rmq[i][0]=i;
    for(int j=1;j<=Log[n];j++){
        int limit=n-(1<<j)+1;
        for(int i=1;i<=limit;i++){
            int a=rmq[i][j-1],b=rmq[i+(1<<j>>1)][j-1];
            if(dep[order[a]]<dep[order[b]])
                rmq[i][j]=a;
            else
                rmq[i][j]=b;
        }
    }
}
int LCA(int u, int v) {
    u=pos[u];v=pos[v];
    if(u>v) swap(u,v);
    int t=Log[v-u+1];
    int a=rmq[u][t],b=rmq[v-(1<<t)+1][t];
    if(dep[order[a]]<dep[order[b]]) return order[a];
    else return order[b];
}
//主席树部分
void init(){
    tot=1;
    root[0]=lson[0]=rson[0]=cnt[0]=0;//建一棵空树
    sort(num+1,num+siz+1);//离散化
    siz=unique(num+1,num+siz+1)-num-1;
}
int Hash(int x){
    return lower_bound(num+1,num+siz+1,x)-num;
}
int update(int rt,int pos,int val){
    int newrt=tot++,temp=newrt;
    cnt[newrt]=cnt[rt]+val;
    int l=1,r=siz;
    while(l<r){
        int mid=(l+r)/2;
        if(pos<=mid){
            r=mid;
            lson[newrt]=tot++;rson[newrt]=rson[rt];
            newrt=lson[newrt];rt=lson[rt];
        }
        else{
            l=mid+1;
            lson[newrt]=lson[rt];rson[newrt]=tot++;
            newrt=rson[newrt];rt=rson[rt];
        }
        cnt[newrt]=cnt[rt]+val;
    }
    return temp;
}
int query(int a,int b,int c,int d,int k){
    int l=1,r=siz;
    while(l<r){
        int mid=(l+r)/2;
        int temp=cnt[lson[a]]+cnt[lson[b]]-cnt[lson[c]]-cnt[lson[d]];
        if(temp>=k){
            r=mid;
            a=lson[a];
            b=lson[b];
            c=lson[c];
            d=lson[d];
        }
        else{
            l=mid+1;
            k-=temp;
            a=rson[a];
            b=rson[b];
            c=rson[c];
            d=rson[d];
        }
    }
    return l;
}
void build(int u,int f){
    root[u]=update(root[f],Hash(arr[u]),1);
    for(int i=head[u];i!=-1;i=edge[i].next){
        int v=edge[i].v;
        if(v==f) continue;
        build(v,u);
    }
}
int main(){

    int n,m,u,v,k;
    initLOG();
    while(~scanf("%d%d",&n,&m)){
        siz=0;
        LcaInit();
        for(int i=1;i<=n;i++){
            scanf("%d",&arr[i]);
            num[++siz]=arr[i];
        }
        for(int i=1;i<n;i++){
            scanf("%d%d",&u,&v);
            addedge(u,v,1);
            addedge(v,u,1);
        }
        Dfs(1,0);
        initRMQ(2*n-1);
        init();
        build(1,0);
        while(m--){
            scanf("%d%d%d",&u,&v,&k);
            int lca=LCA(u,v);
            int ans=query(root[u],root[v],root[lca],root[fa[lca]],k);
            printf("%d\n",num[ans]);
        }
    }
    return 0;
}


TBOX电源方案的详细讲解与分析 输入保护电路是确保车载电子系统稳定性的关键。通过合理选择TVS二极管、保险丝和浪涌抑制器等元器件,能够有效防止来自电源系统的瞬态过电压、浪涌和过流问题,保护后续电路免受损害。针对不同的电源环境和应用场景,可以通过提升功率、优化热管理以及选择高效元器件来进一步提高系统的保护能力和可靠性。 阅读详情

相关推荐

可变形卷积(Deformable Conv)原理解析与torch代码实现

图6为可变形卷积示意图。图1所示为普通卷积在输入特征图上进行卷积计算的过程,卷积核大小为3*3,在输入特征图尺寸为7*7上进行卷积,将卷积核权重与输入特征图对应位置元素相乘并求和得到输出特征图元素,按一定方式滑动窗口就能计算得到整张输出特征图。图6所示,在input feature map上普通卷积操作对应卷积采样区域是一个卷积核大小的正方形(绿框),而可变形卷积对应的卷积采样区域为一些蓝框表示的点,这就是可变形卷积与普通卷积的区别。先来一张图感受一下,图3为标准卷积与可变形卷积的卷积示例。

panghuzhenbang的博客 5万+

Count on a tree SPOJ - COT (树上第k小)

#include<bits/stdc++.h> using namespace std; const int maxn=1e5+10; struct node { int ls,rs,sum; node(int ls=0,int rs=0,int sum=0) { this->ls=ls;this->rs=rs;this->s...

SEIZE THE DAY 258

零外围电路!用CH340X实现ESP32一键下载的完整教程

本文详细介绍了如何利用CH340X系列USB转串口芯片实现ESP32的一键自动下载功能,无需任何外围逻辑控制电路。通过解析CH340X的增强型DTR/RTS功能,提供核心电路设计、电压匹配方案,并指导在Arduino IDE和PlatformIO中进行软件配置,帮助开发者构建简洁、可靠且低成本的ESP32下载方案。

gpu4optimizer的博客 770

[spoj COT - Count on a tree]树上第K小

[spoj COT - Count on a tree]树上第K小分类:Data Structure Presidental Tree template 1. 题目链接[spoj COT - Count on a tree]2. 题意描述N个节点的树,树上每个节点有一个点权。M次询问,每次询问一条链上的第kk小数。 数据范围:(N,M<=100000)(N,M<=100000) Time lim

Fighting! 725

如何使用apifox打包测试用例生成测试套件自动化执行

使用apifox打包测试用例生成测试套件自动化执行

weixin_55613512的博客 2886

自动驾驶——最优控制算法(LQR)工程化总结

到近段时间,真正在我们的控制器上运行最优控制算法(LQR),一步一个脚印,从开始只是知道其“控制理论”的阶段、再到对着一堆网上的资料和公式一筹莫展不知何着手、再到初步实现了LQR算法的开发(但是使用的扭矩环控制,控制的不好,而且由于各种原因被delay,迟迟无法落地),直到大上个星期,泊车平台有此LQR开发需求,又重新了开始了算法的研发,用时一个周时间完成了算法开发,然后再用一个周时间进行实车最优控制算法验证与调试,取得了很大的进展,由于执行器是转角控制的,这无疑少了很多的工作量。

qq_40464599的博客 2787

SPOJ COT Count on a tree 树上第k大(主席树)

题意:http://www.spoj.com/problems/COT/en/ 题意:给定一棵树,树上每个节点都有一个权值,问两点之间路径上第K大值 思路:树上的第k大值,跟区间第k大有些不同,区间第k大每个值在前一个值的基础上新建一棵树,而树上第k大则是在父亲节点的基础上新建一棵树。查询的时候,答案就是root[v] + root[u] - root[lca(v, u)] - root[fa

弱智就要多努力 1950

Python爬虫实战:5分钟抓取东方财富股票数据并保存为CSV

在投资分析与量化研究的日常工作中,获取结构化、可用的金融数据往往是第一步。对于个人投资者和量化入门者而言,如何高效获取A股全市场行情,常常面临网页动态加载、反爬机制与数据整理繁琐等挑战。本文从数据采集的基础概念出发,介绍如何利用Python这一通用编程语言,通过requests库请求财经网站公开的HTTP接口,获取返回的JSON数据,再借助pandas进行字段映射、数据清洗与表格化处理。这种方式相比传统页面解析具有响应快、结构稳定、易于批量操作的显著优势,尤其适合构建个人股票数据池、验证选股策略或进行市场情

weixin_33146151的博客 251

SPOJ COT Count on a tree(树上路径第k小 主席树)

题意: 求树上A,B两点路径上第K小的数 分析: 同样是可持久化线段树,只是这一次我们用它来维护树上的信息。 我们之前已经知道,可持久化线段树实际上是维护的一个前缀和,而前缀和不一定要出现在一个线性表上。 比如说我们从一棵树的根节点进行DFS,得到根节点到各节点的距离dist[x]——这是一个根-x路径上点与根节点距离的前缀和。 利用这个前缀和,我们可以解决一些

AC之路 852

【电弧故障检测算法全解析,电弧串扰问题分析和解决算法】

本文系统分析了电弧故障检测算法及串扰问题解决方案。电弧检测主要采用时频域分析和机器学习方法,通过提取高频噪声、波形畸变等特征实现故障识别。针对电弧串扰问题,提出了自适应滤波、盲源分离和时频联合分析等算法。研究给出了Python和C语言的算法实现示例,包括高频能量检测、过零率计算和陷波滤波器设计。最后指出算法优化方向:实时性提升可采用滑动窗口FFT和硬件加速;抗干扰增强需结合硬件滤波;机器学习扩展可引入随机森林等分类器。该研究为电弧故障检测系统开发提供了完整的技术路线。

syttt的专栏 891

STM32H743 LAN8720网口配置避坑指南:用CubeMX v6.5.0快速搞定LWIP+FreeRTOS

本文详细介绍了使用CubeMX v6.5.0配置STM32H743与LAN8720网口的LWIP+FreeRTOS方案,涵盖硬件连接、时钟配置、ETH外设初始化及LWIP协议栈调优等关键步骤。特别针对常见陷阱提供解决方案,帮助开发者快速实现稳定网络通信,适用于嵌入式网络开发场景。

weixin_33739523的博客 356

spoj COT - Count on a tree(主席树 树上第K大)

COT - Count on a tree #tree You are given a tree with N nodes.The tree nodes are numbered from 1 to N.Each node has an integer weight. We will ask you to perform the following operation:

MR CODER 796

AutoSAR配置与实践(基础篇)3.2 BSW中的I/O架构和模块详解

车门位置传感器(Sensor SWC)输出的电流信号经过了一系列处理,如先被转化为电压信号,后又经ADC转换为数字信号,但是IoHwAb模块对上层隐藏了这一系列处理过程,并将数据直接抽象为它的输出接口,即车门开关状态接口。Sensor SWC 使用RTE接口直接从IoHwAb模块封装的车门开关状态,SWC它并不关心ECU硬件是如何实现的传感器电流采集,也不关心MCU ADC采样精度(如10/12位)IoHwAb把采集的电压抽象为开关状态,使得Sensor SWC不依赖具体的ECU硬件。

nihaoljq2010的博客 1300

SPOJ-COT Count on a tree (静态树上第k小) 精讲

题目链接: Count on a tree 大致题意 给定一棵有nnn个节点的树, 节点上有权值wiw_iwi​. 有mmm次询问, 每次询问(a,b)(a, b)(a,b)最短路径上, 第kkk小的权值是多少. 解题思路 思路一: 树链剖分 + 主席树 + 树外二分/树内二分 复杂度: O(mlog3n)O(mlog^3n)O(mlog3n) / O(mlog2n)O(mlog^2n)O(mlog2n) 这是一个静态树上路径求第kkk小的问题, 如果是在序列上, 我们不难想到用主席树可以做到O(logn

Fau的博客 838

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

SPOJ - COT Count on a tree (树上路径第K小,树上主席树)

Count on a tree  SPOJ - COT  You are given a tree with N nodes.The tree nodes are numbered from 1 to N.Each node has an integer weight. We will ask you to perform the following operation: u

HHH_go_的博客 662

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

SPOJ - COT Count on a tree (主席树,树上第K小)

Count on a tree You are given a tree withNnodes. The tree nodes are numbered from1toN. Each node has an integer weight. We will ask you to perform the following operation: u v k: ask for the k...

Error Man 的博客 260

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

SPOJ - COT Count on a tree(树上第k大模板题)

You are given a tree with N nodes. The tree nodes are numbered from 1 to N. Each node has an integer weight. We will ask you to perform the following operation: u v k : ask for the kth minimum weight ...

Cymbals的博客 366

Count on a tree SPOJ - COT 【可持久化线段树 树上第K小】

传送门 题目描述:给你一个树,每个点有权值,多次询问两点之间的链的第k小权值掉入的坑:必须离散化,不离散化过不了,(第一反应用的二分答案,发现没有题目上没给数据范围,不离散化,会RE到死。。。)解题思路:我们每次儿子的状态室友父亲更新过来,我们要如何得到这条链的信息呢?首先LCA我们肯定是会用到的,这和我们求树上一条链上的距离类似,这条链上的信息, 如果 a 和 b 为这条链的两个端点,那么...

qq_42211531的博客 234

SPOJ COT Count on a tree 树上主席树&链上点权第k大

题意: 给定一棵N个节点的树,每个点有一个权值,对于M个询问(u,v,k),输出节点u到节点v这条链上第k大的点。 思路: 树上主席树,对于树上每一个节点建一个权值线段树,利用lca求出u-->lca-->v这条链,对于这几颗线段树root[u],root[v],root[lca],root[f[lca][0]],利用容斥计算出这条链上的权值线段树,再进行查询。 #inclu...

samscream的博客 369

SPOJ - COT Count on a tree 树上u到v路径第k大 主席树

https://vjudge.net/problem/SPOJ-COT 思路:我们对于每个节点都在它父亲上建主席树,因为具有前缀和性质,我们在求树上两点时u->v,它这个区间的值是T[T[y].l].sum+T[T[x].l].sum-T[T[lca].l].sum-T[T[falca].l].sum(画图即可,u点和v点都是一颗从根过来的主席树,lca以上都有重复多余的路径) ...

diangan7073的博客 231

Count on a tree 【SPOJ - COT】【树上第K小、可持久化线段树(主席树)】

题目链接   想了好久,一开始想去写树链剖分,但是怎样写第K小只在可持久化线段树中写过,然后就是得去想怎样做到状态的得到了,我们可以考虑从根节点出发,关系不断的递推下去,就可以变成一棵自上而下的可持久化线段树了。   具体是:我们可以看作是从根节点出发的树,状态也是这样往下推下去,如此建立的线段树,我们查询一段区间的状态可以从LCA的角度去看问题,找到LCA(x, y)然后,我们只要一个LCA...

既然弱小,就只顾变强就是了 883

SPOJ - COT Count on a tree LCA+主席树 树上路径求第K大模板题

SPOJ - COT Count on a tree 题意: 给出一棵树,每个点都自己的权重,然后给出树上的边,要求从节点 u 到节点 v 路径上的第 k 小的权重的大小。 因为权重可能很大,所以需要离散化 思路: 在树上建主席树 每个点建一棵权值线段树,记录从这个点到根的路径上的点权信息。u可以和fa[u]的线段树共用很多信息,所以上主席树!那么 u 到 v 路径上的点权信息,...

没有梦想何以远行 218

SPOJ-COT Count on a tree求树上的某条路径上第k小的点(LCA+主席树)

https://vjudge.net/problem/SPOJ-COT 思路:以1为根,类似原来板子的按照线性序列去开新的主席树,这里按照图的先序遍历开新的主席树。一棵树表示该点到根节点的前缀关系。 那么寻找路径上的第k点,利用和LCA的前缀关系。 不过这里和之前https://blog.youkuaiyun.com/zstuyyyyccccbbbb/article/details/109882553这题有个共同的关于LCA点权的重复部分。 在这里通过LL sum=tree[tree[pre].l].sum+t

代码笔记本 295

Count on a tree(SPOJ COT + 树上第k大 + 主席树 + LCA)

题目链接:https://www.spoj.com/problems/COT/en/ 题目: 题意:   给你一棵有n个节点的树,求节点u到节点v这条链上的第k大。 思路:   我们首先用dfs进行建题目给的树,然后在dfs时进行主席树的update操作。众所周知,主席树采用的是前缀和思想,区间第k大是与前一个树添加新的线段树,而树上第k大则是与父亲节点添加新的线段树,因而...

di6499的博客 148

SPOJ COT Count on a tree(树上主席树 + LCA 求点第k小)题解

题意:n个点的树,每个点有权值,问你u~v路径第k小的点的权值是? 思路: 树上主席树就是每个点建一棵权值线段树,具体看JQ博客,LCA用倍增logn求出,具体原理看这里 树上主席树我每个点的存的是点u到源点1的权值线段树,那我求点u到v的所有点,显然是 u + v - lca - fa[lca],就是u到1 + v到1 - 多算的lca - 多算的fa[lca]。不能减去两个lca不然少一...

weixin_34392435的博客 160

【SPOJ - COT】Count on a tree 【主席树 求静态树上第k大】

You are given a tree with N nodes. The tree nodes are numbered from 1 to N. Each node has an integer weight.We will ask you to perform the following operation:u v k : ask for the kth minimum weight on

lzs_lazy 293
上一篇: hdu4417 Super Mario
下一篇: hdu4348 To the moon 区间更新
我不会额
博客等级 码龄11年 2粉丝 173原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值