bzoj 4034 [HAOI2015]树上操作 题解(DFS序,线段树,模板)

EPLAN二次开发实战指南:从API接口到定制化界面 本文为EPLAN二次开发实战指南,详细介绍了从搭建C#开发环境、理解API接口到创建定制化插件的完整流程。通过实战案例,如批量修改设备属性和设计交互式界面,帮助电气工程师利用EPLAN二次开发实现工作流程自动化与深度定制,从而显著提升设计效率。 阅读详情

原题链接
洛谷:点我QωQ
bzoj:点我QωQ

题意简述

我们在一个树上搞Gay,给定每个点的初始权值,支持三种操作:

  1. 单点加权值
  2. 子树加权值
  3. 求某个点到根的权值和

点数,操作数都 1 e 5 1e5 1e5,所有输入的数的最大值不会超过 1 e 6 1e6 1e6(不会爆 l o n g   l o n g long\ long long long)

数据

输入

第一行两个正整数 n , m n,m n,m表示点数和操作数。
接下来一行 n n n个正整数表示每个点的初始点权。
接下来 n − 1 n-1 n−1行每行两个正整数 u , v u,v u,v表示 u u u和 v v v之间有连边。
接下来 m m m行每行一个正整数 o o o,表示操作种类。如果
o = 1 o=1 o=1,给定 x , a x,a x,a,表示点 x x x的权加 a a a。
o = 2 o=2 o=2,给定 x , a x,a x,a,表示 x x x子树的权加 a a a
o = 3 o=3 o=3,给定 x x x,询问 x x x到根的路径上的点权和。

输出

对于每个 o = 3 o=3 o=3的操作,输出答案。

样例

输入
5 5
1 2 3 4 5
1 2
1 4
2 3
2 5
3 3
1 2 1
3 5
2 1 2
3 3
输出
6
9
13

思路

当我们第一次看到这个题的时候,我们会想:这 t m ^{tm} tm搞什么,在树上操作?不管了,暴力模拟。。。然后看到数据。。。

接着就开始 f a n t a s i e s fantasies fantasies,如果这个树上的问题,能打到一个 序 列 \color{red}序列 序列上做,那不就好搞了。所以我们观察怎么打到序列上。想解决这个,就要发现子树的 连 续 性 \color{red}连续性 连续性。子树上的点编号肯定不能保证连续,但是,我们会发现,一整个子树在 D F S DFS DFS的过程中,一定是被连续遍历的。所以想了一个东西: D F S DFS DFS序。

如何实现这个东西呢?我们把这个树重新编号!建一个 D F S i d DFSid DFSid数组, D F S i d [ u ] DFSid[u] DFSid[u]表示点 u u u的新编号,由于是按 D F S DFS DFS的顺序做的编号,所以叫 D F S i d DFSid DFSid。但是这样还不行,因为我们只知道子树是连续的,并且从 D F S i d [ u ] DFSid[u] DFSid[u]开始,但连续多长呢?或者终点在哪?无从得知。。。

所以我们考虑把这个 D F S i d DFSid DFSid加一维 [ 0 / 1 ] [0/1] [0/1],我们在 D F S DFS DFS到点 u u u的时候记录一次,设为 D F S i d [ u ] [ 0 ] DFSid[u][0] DFSid[u][0],然后遍历完 u u u点要返回的时候,再记录一次,设为 D F S i d [ u ] [ 1 ] DFSid[u][1] DFSid[u][1],然后这样我们只要在子树加的时候知道区间的终点在 D F S [ u ] [ 1 ] DFS[u][1] DFS[u][1],这样就好记录了。(单点。。。还是说一下吧,只要把 D F S i d [ u ] [ 0 ] DFSid[u][0] DFSid[u][0]加一下即珂。但是为了 3 3 3操作,后面还会继续讲)

那么 3 3 3操作怎么办呢?一条链,虽然珂能 D F S DFS DFS的时候连续遍历,但是也不排除不连续的珂能。这。。。怎么办。。。
举个栗子吧。如下图:
blog1.jpg
(一个比较毒瘤的树。。。)
我们要查询点 17 17 17到根的权值和。我们会发现,那条链是怎么形成的?我们在 D F S DFS DFS遍历的时候,这个就相当于那些还没有出栈的点组成的。(什么是出栈了的点呢?就是那些完全遍历完,没有什么用了的点)。如果我们在查询和的时候,这些出栈的点能够被 抵 消 \color{red}抵消 抵消,那就爽了。珂是。。。如何抵消呢?

我们不是 D F S i d DFSid DFSid开了个 2 2 2么。。。那么,我们只要设一个 i o io io数组, i o [ u ] io[u] io[u]表示 D F S i d DFSid DFSid为 u u u的是进来( i i i)还是出来( o o o)。如果是进来的话,就设为 1 1 1,否则就设为 − 1 -1 −1。与此同时,我们在线段树上维护一个 f l a g flag flag(代码中记为 F F F),表示区间的系数。这个系数是由区间中 所 有 点 的 i o 值 相 加 而 得 \color{red}所有点的io值相加而得 所有点的io值相加而得(如果区间是单点,那么这个系数就是该点上的 i o io io值了)。这个系数是干嘛的呢?它让一些值 自 然 抵 消 \color{red}自然抵消 自然抵消,然后我们在实现区间加值的时候,设我们要加 x x x,并不是直接 S + = x ∗ ( R − L + 1 ) S+=x*(R-L+1) S+=x∗(R−L+1),而是 S + = x ∗ F S+=x*F S+=x∗F。然后由于有了 F F F系数,第三个操作就珂以直接输出前缀和。原因是这个前缀和中就已经包含抵消了。

当然,说一下 1 1 1操作和 2 2 2操作的改变。 1 1 1操作就是多一步,不仅要在 D F S i d [ u ] [ 0 ] DFSid[u][0] DFSid[u][0]位置上单点加值,在 D F S i d [ u ] [ 1 ] DFSid[u][1] DFSid[u][1]上也要单点加值。当然,因为我们加的时候乘了一个系数,在 D F S i d [ u ] [ 1 ] DFSid[u][1] DFSid[u][1]上加的那个实际上是加了个负的。
问题来了:操作 2 2 2要不要变?
答案来了:代码不用,因为函数变了。理由:还记不记得我们在线段树实现区间加值的函数里,改变了一下乘的系数,从原来的 ( R − l + 1 ) (R-l+1) (R−l+1)改成了 F F F,所以函数已经变了,代码就不用变了。(但是一定要明白操作二简单的代码背后在干什么,这个理解比较困难,建议自己模拟一下看看)

说了这么多,总结一下这个题怎么做:

  1. 处理好进入/出去的顺序 D F S i d DFSid DFSid数组,以及出入系数 i o io io数组。
  2. 在乘的时候,维护好 F F F系数。
  3. 对于第 3 3 3个操作,输出前缀和即珂。
  4. 对于第 1 , 2 1,2 1,2个操作,单点/区间加值即珂,不要忘了 1 1 1操作要多一步。

代码:

#include<bits/stdc++.h>
using namespace std;
namespace Flandle_Scarlet
{
    #define int long long
    #define N 1001000
    class Graph//存图
    {
        public:
            int head[N];
            int EdgeCount;
            struct Edge
            {
                int To,Label,Next;
            }Ed[N];

            void clear()
            {
                memset(Ed,-1,sizeof(Ed));
                memset(head,-1,sizeof(head));
                EdgeCount=0;
            }
            void AddEdge(int u,int v,int w)
            {
                ++EdgeCount;
                Ed[EdgeCount]=(Edge){v,w,head[u]};
                head[u]=EdgeCount;
            }

            int Start(int u)
            {
                return head[u];
            }
            int To(int u)
            {
                return Ed[u].To;
            }
            int Label(int u)
            {
                return Ed[u].Label;
            }
            int Next(int u)
            {
                return Ed[u].Next;
            }
    }G;void Add(int u,int v,int w){G.AddEdge(u,v,w);G.AddEdge(v,u,w);}

    int w[N],p[N],io[N];//原点权,乘上了系数的点权,出入系数
    class SegmentTree
    {
        public:
            struct node
            {
                int l,r;
                int s,a,f;
            }tree[N<<1];
            #define ls index<<1
            #define rs index<<1|1

            #define L tree[index].l
            #define R tree[index].r
            #define S tree[index].s
            #define A tree[index].a
            #define F tree[index].f

            #define lL tree[ls].l
            #define lR tree[ls].r
            #define lS tree[ls].s
            #define lA tree[ls].a
            #define lF tree[ls].f

            #define rL tree[rs].l
            #define rR tree[rs].r
            #define rS tree[rs].s
            #define rA tree[rs].a
            #define rF tree[rs].f

            void Update(int index)
            {
                S=lS+rS;
                F=lF+rF;//由于F维护的是区间F自然抵消的和,所以这里要把F也加上
            }
            void BuildTree(int l,int r,int index)
            {
                L=l,R=r,S=A=0;
                if (l==r)
                {
                    S=p[L];
                    F=io[L];
                    return;//单点的情况
                }
                int mid=(l+r)>>1;
                BuildTree(l,mid,ls);
                BuildTree(mid+1,r,rs);
                Update(index);
            }
            void AddOne(int x,int index)
            {
                S+=x*F;//注意这里的改变:不是S+=x*(R-L+1)
                A+=x;
            }
            void PushDown(int index)
            {
                if (A)
                {
                    AddOne(A,ls);
                    AddOne(A,rs);
                    A=0;
                }
            }//差不多的思路
            void Add(int l,int r,int x,int index)
            {
                if (l>R or L>r) return;
                if (l<=L and R<=r) return AddOne(x,index);
                PushDown(index);
                Add(l,r,x,ls);
                Add(l,r,x,rs);
                Update(index);
            }//非常显然的代码
            //对了说一下,AddOne由于是void类型,所以我们返回这个东西不会报错
            int Query(int l,int r,int index)
            {
                if (l>R or L>r) return 0;
                if (l<=L and R<=r) return S;
                PushDown(index);
                return Query(l,r,ls)+Query(l,r,rs);
            }//也是非常显然的代码

            #undef ls //index<<1
            #undef rs //index<<1|1

            #undef L //tree[index].l
            #undef R //tree[index].r
            #undef S //tree[index].s
            #undef A //tree[index].a
            #undef F //tree[index].f

            #undef lL //tree[ls].l
            #undef lR //tree[ls].r
            #undef lS //tree[ls].s
            #undef lA //tree[ls].a
            #undef lF //tree[ls].f

            #undef rL //tree[rs].l
            #undef rR //tree[rs].r
            #undef rS //tree[rs].s
            #undef rA //tree[rs].a
            #undef rF //tree[rs].f
    }T;
    int n,m;
    int DFSid[N][2];int cnt=0;//cnt记录当前的DFS序用到了哪个点
    void DFS(int u,int f)
    {
        DFSid[u][0]=++cnt;
        p[DFSid[u][0]]=w[u];
        io[cnt]=1;//进来了哦QωQ

        for(int i=G.Start(u);~i;i=G.Next(i))
        {
            int v=G.To(i);
            if (v!=f)
            {
                DFS(v,u);//继续搜
            }
        }
        DFSid[u][1]=++cnt;
        p[DFSid[u][1]]=-w[u];
        io[cnt]=-1;//珂以出去了哦QωQ
    }
    void Query()
    {
        scanf("%lld%lld",&n,&m);
        for(int i=1;i<=n;++i)
        {
            scanf("%lld",&w[i]);
        }

        G.clear();//写链式前向星不清图见比♂利了。。。
        for(int i=1;i<n;++i)
        {
            int a,b;scanf("%lld%lld",&a,&b);
            Add(a,b,1);
        }
        cnt=0;memset(DFSid,0,sizeof(DFSid));
        DFS(1,-1);
        T.BuildTree(1,(n<<1),1);
        //千万记得!!!BuildTree在DFS后面!!!

        for(int i=1;i<=m;++i)
        {
            int o,x,a;
            scanf("%lld",&o);
            if (o==1)
            {
                scanf("%lld%lld",&x,&a);
                T.Add(DFSid[x][0],DFSid[x][0],a,1);
                T.Add(DFSid[x][1],DFSid[x][1],a,1);
            }
            else if (o==2)
            {
                scanf("%lld%lld",&x,&a);
                T.Add(DFSid[x][0],DFSid[x][1],a,1);
            }
            else
            {
                scanf("%lld",&x);
                printf("%lld\n",T.Query(1,DFSid[x][0],1));
            }
        }//处理操作
    }
    void Main()
    {
        if (0)
        {
            freopen("","r",stdin);
            freopen("","w",stdout);
        }
        Query();
    }
    #undef int //long long
    #undef N //1001000
};
main()
{
    Flandle_Scarlet::Main();
    return 0;
}

回到总题解界面

从SSD到UFS:3分钟搞懂存储技术进化史(含最新协议对比) 本文梳理了从SSD到UFS的存储技术演进历程,重点解析了eMMC与UFS在架构上的核心差异。UFS凭借高速串行全双工接口,实现了性能与能效的飞跃。文章还对比了最新的UFS 4.0与PCIe 5.0 SSD协议,并探讨了3D NAND、SLC缓存等底层技术,揭示了移动与PC存储技术融合的未来趋势。 阅读详情

相关推荐

2024东南大学533复试C++程序设计笔试真题精讲

【东南553复试C++】2024东南大学533复试C++程序设计笔试真题精讲

转遍世界 3415

bzoj4034 [HAOI2015]树上操作

Description有一棵点数为 N 的树,以点 1 为根,且树点有边权。然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a 。 操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a 。 操作 3 :询问某个节点 x 到根的路径中所有点的点权和。

wumingshi 432

COMSOL电磁仿真案例——感应线圈

COMSOL电磁建模仿真案例——感应线圈

冲击10w 6万+

BZOJ 4043 [HAOI2015]树上操作 dfs序 线段树

$ \Rightarrow $ 戳我进BZOJ原题 $ \Rightarrow $ 戳我进洛谷原题 [HAOI2015]树上操作 Time Limit: 10 Sec Memory Limit: 256 MB   Description 有一棵点数为 $ N $ 的树,以点 $ 1 $ 为根,且树点有边权。然后有 $ M $ 个操作,分为三种:   操作 $ 1 $ :把某个节点 $ ...

ayf1988的博客 213

zabbix5+dify+ollama+deepseek+企业微信 本地部署实现故障智能分析

zabbix5告警信息deepseek自动分析

slc14211421的专栏 3073

排列显示阿拉伯语、数字及英文时的处理方法

这段时间参与开发沙特阿拉伯的网站模板,模板使用的语言是阿拉伯语,其显示顺序为从右到左,而中文、数字及英文的显示顺序为从左到右 ,所以当遇到一行文字内既有阿拉伯语又有数字和英文时会出现语序混乱的问题,如 期待显示的文案为: 按顺序写入,对应的代码如以下,其中currency_pay为变量,值为356SAR <span>الدفع الفعلي:{{currency_pay}}</span> 显示为 الدفع الفعلي : 356SAR 金额356和货币符号SAR分开了,这样显

llq886的博客 5807

BZOJ4034(HAOI2015)[树上操作]--线段树+DFS序

bzoj4034

Greninja的博客 983

手把手教你搞定国民技术N32G031的Keil开发环境(附Pack包和JLink配置)

本文详细指导如何搭建国民技术N32G031的Keil开发环境,包括Keil MDK安装与激活、Pack包导入、JLink调试器配置等关键步骤。特别针对新手常见问题提供解决方案,帮助开发者快速上手N32G031系列MCU的开发工作。

cuangu9341的博客 426

【树链剖分(DFS序)+线段树】BZOJ4034(HAOI2015)[树上操作]题解

题目概述有一棵点数为 N 的树,以点 1 为根,且树点有边权。然后有 M 个操作,分为三种:操作 1 :把某个节点 x 的点权增加 a 。操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a 。操作 3 :询问某个节点 x 到根的路径中所有点的点权和。解题报告操作1,3直接用树链剖分就可以解决,但是操作2什么鬼?实际上很简单,因为树链剖分也在构造一组DFS序(只不过优先重儿子),所以用这组

ZigZagK的博客 489

BUCK降压斩波电路设计实战:从IGBT选型到续流二极管优化

本文详细解析了BUCK降压斩波电路的设计实战,从IGBT选型到续流二极管优化,涵盖了关键参数设计、调试技巧及电磁兼容问题解决方案。通过实际案例和数据对比,帮助工程师高效完成DC-DC转换电路设计,提升系统性能和可靠性。

weixin_29253711的博客 95

Marin说PCB之LPDDR5的布线注意事项--01

以上就是本期所有内容了,有些是通用的LPDDR5的设计准则,有的是针对单板的设计规则,严格意义说是没有哪一种规则是完全适用的LPDDR5的 通用规则的,不同的单板可能板厚,板材,层数,SOC以及DDR的型号都是不同的,一般的做法就是严格按照SOC手册上的LPDDR5的要求加上仿真同事给的建议修改优化就好了,我们下期文章不见不散。我们知道想要做好一个LPDDR颗粒,需要考虑的是因素有很多例如,电源完整性,信号完整性,层叠的设计,布局的摆放,布线的合理规划,去耦电容的摆放等等。

weixin_45223454的博客 3163

【HAOI2015】BZOJ4034 树上操作题解(dfs序+线段树)

题目:bzoj4034. 这道题的题目大意是说:给出一颗树,让你支持3个操作: 1.把某个节点xxx的点权增加aaa. 2.把某个节点xxx为根的子树中所有点的点权都增加aaa. 3.询问某个节点xxx到根的路径中所有点的点权和. 这道题显然是道树剖板子题,但是我们强制用dfs序做呢? 我们把dfs序时一个节点入栈出栈各操作一次,现在我们可以让入栈为正,出栈为负,得到一个111和−1-1−1组成的...

hzk_cpp的博客 418

TI IWR6843AOP雷达+DCA1000EVM数据采集:官方手册里的坑,我帮你踩完了

本文详细解析了TI IWR6843AOP雷达与DCA1000EVM数据采集实战中的12个关键细节,包括硬件连接陷阱、mmWave Studio隐藏设置、数据采集参数优化等,帮助开发者避开官方手册未提及的常见问题,提升数据采集效率和系统稳定性。

weixin_28366475的博客 1102

bzoj 4034 [HAOI2015]树上操作

树链剖分

spinning 358

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

【BZOJ4034】[HAOI2015]树上操作 树链剖分+线段树

【BZOJ4034】[HAOI2015]树上操作 Description 有一棵点数为 N 的树,以点 1 为根,且树点有边权。然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a 。 操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a 。 操作 3 :询问某个节点 x 到根的路径中所有点的点权和。 Input 第一行包含两个整数...

weixin_30699831的博客 95

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

[BZOJ 4034][HAOI 2015] 树上操作 树链剖分+DFS序

题目传送门:【BZOJ 4034】题目大意:有一棵点数为 N 的树,以点 1 为根,且树点有边权。然后有 M 个操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a 。 操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a 。 操作 3 :询问某个节点 x 到根的路径中所有点的点权和。题目分析: (经实验证明,本人的查错能力越发低下,又花了三个小时来做这道题)由题,结合树链

江澤妮可 407

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

bzoj4034&luogu3178 [HAOI2015]树上操作

http://www.elijahqi.win/archives/803 题目描述 有一棵点数为 N 的树,以点 1 为根,且树点有边权。然后有 M 个操作,分为三种:操作 1 :把某个节点 x 的点权增加 a 。操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a 。操作 3 :询问某个节点 x 到根的路径中所有点的点权和。 输入输出格式 输入格式: 第一行包含两个整数 N,...

Elijahqi 204

BZOJ4034-[HAOI2015]树上操作

题解: 一道模板题。 树链剖分+线段树。 码农题。 写得心态爆炸。 纪念一下。 Code:Code:Code: #include&amp;amp;lt;bits/stdc++.h&amp;amp;gt; #define ll long long const int N=1e5+5; using namespace std; int n,m,head[N*2],a[N],size[N],son[N],tot,fi[N],en[N]...

Mi-Queen 369

BZOJ 4034 [HAOI2015]树上操作(树链剖分)

题目链接 BZOJ4034 这道题树链剖分其实就可以了。 单点更新没问题。 相当于更新 [f[x], f[x]]这个区间。 f[x]表示树链剖分之后每个点的新的标号。 区间更新的话类似DFS序,求出所对应的区间。 也就是[f[x], f[x] + size[x] - 1]。 给这个区间加上a即可。 询问的时候有两种方法,一个是直接套模板。 还有一种方法是,因为是查询x到1的权...

weixin_30570101的博客 106

bzoj4034:[HAOI2015]树上操作

Description 有一棵点数为 N 的树,以点 1 为根,且树点有边权。然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a 。 操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a 。 操作 3 :询问某个节点 x 到根的路径中所有点的点权和。 Input 第一行包含两个整数 N, M 。表示点数和操作数。接下来一行 N 个整数,...

weixin_30446197的博客 132

BZOJ 4034 [HAOI2015]树上操作 树链剖分

Description 有一棵点数为 N 的树,以点 1 为根,且树点有边权。然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a 。 操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a 。 操作 3 :询问某个节点 x 到根的路径中所有点的点权和。 Input 第一行包含两个整数 N, M 。表示点数和操作数。接下来一行 N 个整数,

I'm Growing 345

BZOJ4034[HAOI2015]树上操作——树链剖分+线段树

题目描述 有一棵点数为 N 的树,以点 1 为根,且树点有边权。然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a 。 操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a 。 操作 3 :询问某个节点 x 到根的路径中所有点的点权和。 输入 第一行包含两个整数 N, M 。表示点数和操作数。接下来一行 N 个整数,表示树中节点的初始权...

weixin_34409703的博客 147

洛谷 P3178 BZOJ 4034 [HAOI2015]树上操作

题目描述 有一棵点数为 N 的树,以点 1 为根,且树点有边权。然后有 M 个操作,分为三种:操作 1 :把某个节点 x 的点权增加 a 。操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a 。操作 3 :询问某个节点 x 到根的路径中所有点的点权和。 输入输出格式 输入格式: 第一行包含两个整数 N, M 。表示点数和操作数。接下来一行...

weixin_34228662的博客 123

【bzoj4034】[HAOI2015]树上操作 树链剖分+线段树

题目描述 有一棵点数为 N 的树,以点 1 为根,且树点有边权。然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a 。 操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a 。 操作 3 :询问某个节点 x 到根的路径中所有点的点权和。 输入 第一行包含两个整数 N, M 。表示点数和操作数。接下来一行 N 个整数,表示树中节点的初始权值。接下来 ...

weixin_30517001的博客 106

[bzoj4034][HAOI2015]树上操作(树链剖分+线段树)

题目 传送门 操作 1 :把某个节点 x 的点权增加 a 。 操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a 。 操作 3 :询问某个节点 x 到根的路径中所有点的点权和 题解 模板题 代码 #include&lt;cstdio&gt; #include&lt;cstring&gt; #include&lt;algorithm&gt; using namespace...

A_Comme_Amour的博客 312
上一篇: HDU 5493 Queue 题解(线段树)
下一篇: 树链剖分 笔记
LightningUZ
博客等级 码龄9年 33粉丝 254原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值