入门-线段树

Go极简开发范式:零依赖单文件可执行实践 在现代软件工程中,'轻量级开发'正成为应对边缘计算、嵌入式运维和教学场景的关键能力。其核心在于剥离框架冗余、消除构建依赖、压缩部署单元——本质是回归‘代码即服务’的原始契约。Go语言凭借静态链接、跨平台编译与标准库完备性,天然支撑这一范式;而单文件可执行、go:embed资源内嵌、flag类型安全配置等特性,共同构成零外部依赖的技术底座。该模式显著降低运维复杂度、提升启动性能、强化安全边界,适用于健康检查服务、CLI工具、固件内置组件及教学原型等对确定性、体积与交付速度敏感的场景。 阅读详情

1. 最高分是多少

题目描述

老师想知道从某某同学到某某同学当中,分数最高的是多少。
现在请你编程模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。

输入

输入包含多组测试数据。
每组输入第一行是两个正整数N和M(0<N<=30000,0<M<5000),分表代表学生的数目和操作的数目。
学生ID编号从1编到N。
第二行包含N个整数,代表这N个学生的初始成绩,其中第i个数代表ID为i的学生的成绩。
接下来有M行。每一行有一个字符C(只取‘Q’或‘U’),和两个正整数A,B。
当C为‘Q’的时候,表示这是一条询问操作,它询问ID从A到B(包括A,B)的学生当中,成绩最高的是多少。
当C为‘U’的时候,表示这是一条更新操作,要求把ID为A的学生的成绩更改为B。

输出

对于每一次询问操作,在一行里面输出最高成绩。

样例输入

5 6
1 2 3 4 5
Q 1 5
U 3 6
Q 3 4
Q 4 5
U 2 9
Q 1 5

样例输出

5
6
5
9

解析

入门级的线段树,单点修改和区间查询。
线段树的单点修改就是一直递归到叶子节点把 l o g 2 n log_2{n} log2​n个节点的值修改,回溯的时候往上维护信息即可。线段树的区间查询也不是很难,我们考虑三种情况

  1. 当前查询的左端点小于等于当前节点储存的中点,那我们继续往左儿子找就好了。
  2. 当前查询的右端点大于中点,那我们往右儿子找。
  3. 如果当前询问的左右端点包含了中点,那我们就把询问区间变为询问区间左端点到中点,中点+1到询问右端点两个区间然后递归查找就好了。

题目链接 :郑大最高分是多少 杭电I Hate It

代码

代码中的Build(),Update(),Query()函数可以当作模板来使用,这里求的区间最大值,根据相应问题改成相应的函数。

#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;

const long maxn = 5e5 + 5; 

int segTree[maxn]; //连续存储线段树 
int In[maxn]; //输入数据 

int max(int a, int b){
	return a>b?a:b;
}

//root当前线段数的根节点,[l,r]当前节点的区间 
void Build(int root, int l, int r)
{
    if(l == r){
		segTree[root] = In[l];
		return ;
	}
    int mid = (l + r)>>1; 
    Build(root<<1, l, mid); 
	Build(root<<1|1, mid+1, r);
    segTree[root] = max(segTree[root<<1],segTree[root<<1|1]);
}

//root 当前线段树的根节点,[l,r]当前节点所表示的区间,[ql, qr]此次查询的区间
int Query(int root, int l, int r, int ql, int qr)
{
    if(l == ql && r == qr)return segTree[root];
    int mid = (l + r)>>1;
    // 查询区间在当前区间左半部分 
    if(qr <= mid)return Query(root<<1, l, mid, ql, qr);
    // 查询区间在当前区间左半部分 
    else if(ql > mid)return Query(root<<1|1, mid+1, r, ql, qr);
    //  
    else return max(Query(root<<1, l, mid, ql, mid), Query(root<<1|1, mid+1, r, mid+1, qr));
}

// 单节点更新 
//root 当前线段树的根节点,[l,r] 当前节点所表示的区间,index 待更新的节点的索引,value更新的值 
void Update(int root, int l, int r, int index, int value)
{
    if(l == r){
		segTree[root] = value;
		return ;
	}
    int mid = (l + r)>>1;
    // 待更新节点在左子树  
    if(index <= mid) Update(root<<1, l, mid, index, value);
    // 待更新节点在右子树 
    else Update(root<<1|1, mid+1, r, index, value);
    // 更新当前节点 
    segTree[root] = max(segTree[root<<1], segTree[root<<1|1]);
}


int main()
{
	int n, m; //n是学生个数,m是操作次数 
	 
    while(scanf("%d%d",&n,&m) != EOF){
        // 从下标1开始存 
    	for (int i=1; i<=n; i++){
    		scanf("%d", &In[i]);
		} 
		//Build(root, l, r);
		Build(1, 1, n);
		for (int i=0; i<m; i++) {
			char op[30];
			int a, b;
            scanf("%s", op);
            scanf("%d%d", &a, &b);
            if (op[0] == 'Q') {
                printf("%d\n", Query(1, 1, n, a, b));
            }
            else if (op[0] == 'U') {
                Update(1, 1, n, a, b);
            }
        }
	}
    return 0;
}
  • 杭电里这道题输入输出最好使用scanf,cin的耗时巨大,差异还是很明显的
    上面一行是scanf读入,下面一行是cin读入

2. 敌兵布阵

题目描述

C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了。A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况。由于采取了某种先进的监测手段,所以每个工兵营地的人数C国都掌握的一清二楚,每个工兵营地的人数都有可能发生变动,可能增加或减少若干人手,但这些都逃不过C国的监视。
中央情报局要研究敌人究竟演习什么战术,所以Tidy要随时向Derek汇报某一段连续的工兵营地一共有多少人,例如Derek问:“Tidy,马上汇报第3个营地到第10个营地共有多少人!”Tidy就要马上开始计算这一段的总人数并汇报。但敌兵营地的人数经常变动,而Derek每次询问的段都不一样,所以Tidy不得不每次都一个一个营地的去数,很快就精疲力尽了,Derek对Tidy的计算速度越来越不满:"你个死肥仔,算得这么慢,我炒你鱿鱼!”Tidy想:“你自己来算算看,这可真是一项累人的工作!我恨不得你炒我鱿鱼呢!”无奈之下,Tidy只好打电话向计算机专家Windbreaker求救,Windbreaker说:“死肥仔,叫你平时做多点acm题和看多点算法书,现在尝到苦果了吧!”Tidy说:"我知错了。。。"但Windbreaker已经挂掉电话了。Tidy很苦恼,这么算他真的会崩溃的,聪明的读者,你能写个程序帮他完成这项工作吗?不过如果你的程序效率不够高的话,Tidy还是会受到Derek的责骂的.

输入

第一行一个整数T,表示有T组数据。
每组数据第一行一个正整数N(N<=50000),表示敌人有N个工兵营地,接下来有N个正整数,第i个正整数ai代表第i个工兵营地里开始时有ai个人(1<=ai<=50)。
接下来每行有一条命令,命令有4种形式:
(1) Add i j,i和j为正整数,表示第i个营地增加j个人(j不超过30)
(2)Sub i j ,i和j为正整数,表示第i个营地减少j个人(j不超过30);
(3)Query i j ,i和j为正整数,i<=j,表示询问第i到第j个营地的总人数;
(4)End 表示结束,这条命令在每组数据最后出现;
每组数据最多有40000条命令

输出

对第i组数据,首先输出“Case i:”和回车,
对于每个Query询问,输出一个整数并回车,表示询问的段中的总人数,这个数保持在int以内。

样例输入

1
10
1 2 3 4 5 6 7 8 9 10
Query 1 3
Add 3 6
Query 2 7
Sub 10 2
Add 6 3
Query 3 10
End

样例输出

Case 1:
6
33
59

题目链接:敌兵布阵

#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;

const long maxn = 2e5 + 10; 

int segTree[maxn]; //连续存储线段树 
int In[maxn]; //输入数据 

int sum(int a, int b){
	return a + b;
}

//root当前线段数的根节点,[l,r]当前节点的区间 
void Build(int root, int l, int r)
{
    if(l == r){
		segTree[root] = In[l];
		return ;
	}
    int mid = (l + r)>>1; 
    Build(root*2, l, mid); 
	Build(root*2+1, mid+1, r);
    segTree[root] = sum(segTree[root*2],segTree[root*2+1]);
}

//root 当前线段树的根节点,[l,r]当前节点所表示的区间,[ql, qr]此次查询的区间
int Query(int root, int l, int r, int ql, int qr)
{
    if(l == ql && r == qr)return segTree[root];
    int mid = (l + r)/2;
    // 查询区间在当前区间左半部分 
    if(qr <= mid)return Query(root*2, l, mid, ql, qr);
    // 查询区间在当前区间左半部分 
    else if(ql > mid)return Query(root*2+1, mid+1, r, ql, qr);
    //  
    else return sum(Query(root*2, l, mid, ql, mid), Query(root*2+1, mid+1, r, mid+1, qr));
}

// 单节点更新 
//root 当前线段树的根节点,[l,r] 当前节点所表示的区间,index 待更新的节点的索引,value更新的值 
void Update(int root, int l, int r, int index, int value)
{
    if(l == r){
		segTree[root] += value;
		return ;
	}
    int mid = (l + r)/2;
    // 待更新节点在左子树  
    if(index <= mid) Update(root*2, l, mid, index, value);
    // 待更新节点在右子树 
    else Update(root*2+1, mid+1, r, index, value);
    // 更新当前节点 
    segTree[root] = sum(segTree[root*2], segTree[root*2+1]);
}


int main()
{
	int T, n;
	cin>>T;
	for (int cs=1; cs<=T; cs++){
		cin>>n;
		//新的输入应初始化数组
    	memset(segTree, 0, sizeof(segTree));
        memset(In, 0, sizeof(In));
        // 从下标1开始存 
    	for (int i=1; i<=n; i++){
    		cin>>In[i];
		} 
		//Build(root, l, r);
		Build(1, 1, n);
		// 输出case number: 
		cout<<"Case "<<cs<<":"<<endl;
		char op[30];
		int a, b;
		// 用cin的时候超时了 
        while(scanf("%s", op) && op[0] != 'E'){
        	cin>>a>>b;
        	if (op[0] == 'Q'){
				cout<<Query(1, 1, n, a, b)<<endl;
			}else if (op[0] == 'A'){
				Update(1, 1, n, a, b);
			}else if (op[0] == 'S'){
				Update(1, 1, n, a, -b);
			}
		}
	} 
    return 0;
}
算法竞赛从入门到进阶pdf_【算法趣谈】线段树 从入门到进阶 前言:这是一篇笔者两年前所写的博客。如今,在线段树在脑海中即将遗忘之际,这两年前留下的文章,终于将其再次唤醒。这篇文章对于线段树的理解虽谈不上绝对深刻,但是也能详细且简明地解释其流程。因而也收获了3w+的阅读量。今日,我也将原先的博客的语言以及配图进行了一定优化,希望能对各位读者有所帮助。“线段树是什么?线段树怎么写?”如果你在考提高组前一天还在问这个问题,那么你会与一等奖失之交... 阅读详情

相关推荐

线段树--概念+模板+入门题

引子 子问题–1 给出n个数,m次问询,每次问询给出一个范围l、r,求区间l–r的总和 很容易想到用前缀和可以解决 O(n) 子问题–2 给出n个数,m次修改,每次给出一个范围l、r和一个值k,将区间l—r的数全部+k,m次修改后,再问询1次求区间l–r的总和 也可以想到这用差分就能解决 O(n) 最后将这两个问题结合起来,给出n个数,m次操作,操作有两种一个是将区间l–r的值+k,一个是询问区间l–r的总和。 这个问题与之前不同的地方是,之前想要求一个范围只需处理一次数据算前缀和,然后数据不变,可以一

Rikkaの博客 3694

每日一题:最高分是多少

一、题目描述 老师想知道从某某同学当中,分数最高的是多少,现在请你编程模拟老师的询问。当然 老师有时候需要更新某位同学的成绩 输入:. 输入包括多组测试数据。 每组输入第一行是两个正整数N和M(0 < N <= 30000,0 < M < 5000),分别代表学生的数目和操作的数目。 学生ID编号从1编到N。 第二行包含N个整数,代表这N个学生的初始成绩,其中第i个数代表ID为i的学生的成绩 接下来又M行,每一行有一个字符C(只取‘Q’或‘U’),和两个正整数A,B,当C为’Q’的时

weixin_45970688的博客 1194

ADS新手必看:ICCAP数据导入与导出CSV的完整流程(附常见问题解决)

本文为ADS新手详细讲解了如何将ICCAP测试数据导入ADS进行仿真分析,并导出为通用CSV格式的完整流程。内容涵盖文件格式解析、导入设置、数据验证、处理技巧及常见问题排查,重点解决了数据文件导入过程中的兼容性与单位映射等核心难点,帮助射频工程师高效连接测量与仿真环节。

peace的博客 558

每组输入第一行是两个正整数N和M(0 < N <= 30000,0 < M < 5000),分别代表学生的数目和操作的数目。

每组输入第一行是两个正整数N和M(0 < N

Jiangshang_jiu 5685

一生一芯——用RTL实现最简单的处理器NPC(南大数逻计组RV32ICPU) 代码及思考参考

本文介绍自己前期用Verilog编写的基于RV32I指令集的CPU,个人认为是最简单最易懂的版本(即没做什么优化,即代码很水,没有考虑一些奇怪的情况,只适用简单指令序列,即题目所示最简单的处理器),适合新手练手Verilog以及了解简单CPU的运行过程。本文基于一生一芯,利用Verilator进行仿真,并用gtkwave查看波形,不了解verilator和gtkwave的可以看前几篇文章。

long0_o的博客 3310

[ENVI]-[高光谱遥感]-波谱沙漏分析工具的使用

图1-2-1查看特殊波段的坏波段图1-2-2在中添加坏波段ENVI波谱沙漏分析工具MNF变换。

m0_57992372的博客 1470

刷题长路(1):查找最大数

刷题记录(1):查找最大数 之前的刷题记录,之后也会陆陆续续进行分析(之前没做笔记,保存工程文件占位得很) 输入 输入包括多组测试数据。 每组输入第一行是两个正整数N和M(0 < N <= 30000,0 < M < 5000),分别代表学生的数目和操作的数目。 学生ID编号从1编到N。 第二行包含N个整数,代表这N个学生的初始成绩,其中第i个数代表ID为i的学生的成绩 接下来又M行,每一行有一个字符C(只取‘Q’或‘U’),和两个正整数A,B,当C为'Q'的时候, 表示这是一条询问

qq_41668705的博客 697

百元DIY手机荧光计:低成本荧光检测平台搭建与实战

荧光检测是一种基于物质受特定波长光激发后发射更长波长荧光的分析技术,其核心原理在于光与物质的相互作用。通过选择性激发与检测,该技术能实现对痕量物质的高灵敏度、高特异性定量分析,在生物医学、环境监测和食品安全等领域具有重要价值。传统荧光分光光度计虽精度高,但成本昂贵、体积庞大且操作复杂,限制了其在现场快检和普及教育中的应用。本文聚焦于如何利用智能手机的高性能摄像头和处理器,结合低成本光学滤光片和LED光源,构建一个便携、经济的DIY荧光检测平台。该方案通过简化光路设计,采用带通滤光片进行波长选择,并利用图像处

weixin_34194829的博客 308

华为机试题 查询

每组输入第一行是两个正整数N和M(0 学生ID编号从1编到N。 第二行包含N个整数,代表这N个学生的初始成绩,其中第i个数代表ID为i的学生的成绩。 接下来有M行。每一行有一个字符C(只取‘Q’或‘U’),和两个正整数A,B。 当C为‘Q’的时候,表示这是一条询问操作,它询问ID从A到B(包括A,B)的学生当中 ,成绩最高的是多少。 当C为‘U’的时候,表示这是一条更新操作,要求把ID

qq_34295546的博客 903

玩转openclaw+企业微信

OpenClaw横空出世:AI从问答到执行的范式革命 OpenClaw作为2026年AI领域的重大突破,实现了从对话机器人到智能执行体的进化。其核心价值在于"自主执行"而非简单交互,通过六层解耦架构(表现层、网关层、运行时层、技能层、工具层、记忆层)构建完整执行闭环。关键技术包括Model Context Protocol实现多模型兼容,以及事件驱动架构确保实时响应。安装过程支持多平台,通过Node.js环境即可快速部署,并支持对接主流大模型。OpenClaw标志着AI开始真正&quot

西木风落 1591

SKILL 是什么?怎么做?五分钟 带你从入门到精通

skill-creator 是 Anthropic 官方开源的“元技能”——一个专门用来创建 Skill 的 Skill。你只需要用自然语言描述想要什么功能,它会自动生成。从更宏观的视角看,Skills 的出现标志着 AI 编程的一次范式转变。在传统的 AI 编程中,代码是确定性的:1 是 1,2 是 2。但到了大模型时代,代码变得不确定——你不知道模型会输出什么,不知道它会不会突然删掉几行代码。这种不确定性让很多开发者感到不安。Skills 把这套逻辑又拉了回来。

十年老程序猿,AI 疯狂研究专家,前沿硬核知识分享 642

【线段树】线段树入门之入门

线段树的入门级 总结       线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。       对于线段树中的每一个非叶子节点[a,b],它的左儿子表示的区间为[a,(a+b)/2],右儿子表示的区间为[(a+b)/2+1,b]。因此线段树是平衡二叉树,最后的子节点数目为N,即整个线段区间的长度。       使用线段树可以

生命有一种绝对 4万+

优化dalsa相机检测界面

上节实现了使用qt结合dalsa相机显示检测到缺陷的画面,由于窗口过于简陋,本节将进行一个界面优化。

A1983Z的博客 988

线段树 入门

<br />等待中。。。

silence 450

2024年09月CCF-GESP编程能力等级认证Scratch图形化编程二级真题解析

小杨购物 【题目描述】 小杨有n元钱用于购物。商品A的单价是a元,商品B的单价是b元。 小杨想购买相同数量的商品A和商品B。 默认小猫角色和白色背景,编写程序请你帮小杨计算出他最多能够购买多少个商品A和商品B。 【输入描述】 新建变量“n”用于存储小杨购物的金额。 新建变量“a”用于存储商品A的价格。 新建变量“b”用于存储商品B的价格。 1≤n,a,b≤100000 如下图所示: 图片 【输出描述】 新建变量“result”用于存储小杨最多购买商品A和商品B的个数。 如下图所示:

人生就是一个不断学习的过程 497

IMSL CNL 7.0.0 (x86-64)Crack

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

线段树 从入门到进阶

朴素的做法是for(i=4;因为如果对于1~4这个区间,你把1~3区间+1,相当于把节点1~2和3标记,但是如果你查询2~4时,你会发现你加的时没有标记的2节点和没有标记的3~4节点加上去,结果当然是错的。区间修改和单点查询,我们的思路就变为如果把这个区间加上k,相当于把这个区间涂上一个k的标记,然后单点查询的时候,就从上跑道下,把沿路的标记加起来就好。你会想到,我们只需要在查询的时候,如果我们要查的2节点在1~2区间的里面,那我们就可以把1~2区间标记的那个+1给推下去这样就能顺利地加上了。...

TYWZzjm的博客 304

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

线段树入门

基于arr数组构建线段树,我们根节点存储的是区间[0-5]的和,再往下面分叉,左边表示[0-2]的和,右边表示[3-5]的和,以此类推,最后所有的叶子节点就是数组中的所有数字。线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。我们判断要修改的点是位于线段树的左子树还是右子树,若是左子树,递归左子树,修改对应节点的值,若是右子树那就递归右子树,修改对应节点的值。:我们使用一个数组保存,先标记上各个节点的下标,根节点下标为0,根节点的左孩子下表为。

冲出仁川,走出马德里,故事还会再继续 1926

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

线段树从入门到入土

线段树入门 引题 有一个包含NNN个数的序列(N≤1e6N \leq 1e6N≤1e6),给Q(≤1e6)Q(\le 1e6)Q(≤1e6)个操作,每个操作是下面两种中的一种: 区间加:给定l,r,xl,r,xl,r,x,将序列NNN下标∈[l,r]\in [l, r]∈[l,r]的数加上xxx 区间求和:给定l,rl,rl,r,询问下标∈[l,r]\in [l,r]∈[l,r]的数的和 一种...

Jr1preg的博客 289

线段树入门总结

树结构的基本思想是分割,普通二叉搜索树是按照数据来划分(想了解二叉搜索树的请移步:Here),线段树处理的对象是线段(区间也可以看成线段,L==R时为一个点),它把线段组织成有利于检索和统计的形式,它的本质是线段的二叉搜索树。但是它的线段可以分解和合并,线段树又有一些一般二叉检索树没有的特殊操作。另外线段树操作的是整个区间,它的时间复杂度不依赖于数据对象。它将一个区间划分成一些单元区间,每个单元区...

weixin_30621959的博客 73

POJ1436 线段树入门 区间标记

POJ1436 线段树入门 传送门 大概题意: 有n条垂直于x轴的线段,给定每条线段的 ‘y’ 范围 当两条线段之间可以用一条不覆盖到其他线条且平行于X轴的线段连接时,定义两条线段相互见。求有多少 “两两可见的三条线段” 的数量。 思维: 首先把题目给的数据可视化一下(图有点丑) 然后用肉眼观察(废话) 从左到右地看,发现只有 黄色 、蓝色 和 红色这一对能组成符合要求的三元组。 这样子看好...

LiJgQg的博客 328

线段树完全指南:从入门到精通

线段树完全指南摘要 线段树是一种高效的区间查询数据结构,能在O(logn)时间内完成区间操作。本文系统讲解线段树从基础到进阶的应用: 基本原理:采用二叉树结构,每个节点代表一个区间,支持分治处理。 核心操作: 建树(build) 单点修改(modify) 区间查询(query) 使用pushup维护节点信息 关键优化:引入懒标记(Lazy Propagation)技术,延迟处理区间修改,通过pushdown函数实现标记下传,大幅提高效率。 典型应用: 区间求和/最值查询 区间修改(加法/乘法) 解决&quo

May_as_well的博客 1665

线段树入门到入门到入门

萌新的成长之路 1、线段树是什么? 百科说:线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。 使用线段树可以快速的查找某一个节点在若干条线段中出现的次数,时间复杂度为O(logN)。而未优化的空间复杂度为2N,实际应用时一般还要开4N的数组以免越界,因此有时需...

qq_43803508的博客 395
上一篇: 目标检测之RCNN,SPP-NET,Fast-RCNN,Faster-RCNN
下一篇: 入门-贪心算法
君只见独不见
博客等级 码龄12年 99粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值