hdu4578(三个更新操作,三个求值操作)

HDU 4578 Transformation(线段树+做了4天的神题+详解) Yuanfang is puzzled with the question below: There are n integers, a 1, a 2, …, a n. The initial values of them are 0. There are four kinds of operations. Operation 1: Add c to each number between a x and a y inclusive. In other words, do transformation 阅读详情
<span style="widows: auto;"><span style="font-family:KaiTi_GB2312;font-size:18px;">题意:有长为n的数列,初始化为全部为0,我们对它有三个操作:</span></span>
(1)把数列中的一段区间全部乘一个值; 
(2)把数列中的一段区间全部加一个值; 
(3)把数列中的一段区间全部替换成一个值;
然后再对它有一个查询操作:
求数列中的一段区间的每个数的p次方之和(1<=p<=3)

解题思路:
    因为p只有三个值,所以我们可以将这三个值分别进行求解,我将它们定义为sum,sum2,sum3;
结构体定义:
struct Node{
    int l,r;
    ll sum,sum2,sum3;
    int add,mul;
}tree[4*MAXN];
两个lazy-tag标记分别初始化为add=0,mul=1;
我们用两个lazy-tag标记来处理三个更新,对于第三个替换更新,我们可以用前面两个标记进行更新,即mul=0,add=v;然后我们设置lazy-tag标记的优先级,乘法>加法;
细节问题:
<1>(p=1)
(a1*mul+add) + (a1*mul+add) + ... + (an*mul+add) = (a1+a2+...+an)*mul + n*add;
<2>(p=2) 
(a1*mul+add)^2 + (a1*mul+add)^2 + ... + (an*mul+add)^2 = (a1^2+a2^2+...+an^2)*mul^2 + 2*add*mul*(a1+a2+...+an) + n*add^2;
<3>(p=3)
(a1*mul+add)^3 + (a1*mul+add)^3 + ... + (a1*mul+add)^3 = (a1^3+a2^3+...+an^3)*mul^3 +
3*add*mul^2*(a1^2+a2^2+...+an^2) + 3*add^2*mul*(a1+a2+...+an) + n*add^3;

参考代码:
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
const int MAXN = 100000+5;
typedef long long ll;
#define MOD 10007
struct Node{
	int l,r;
	ll sum,sum2,sum3;
	int add,mul;
}tree[4*MAXN];
void build(int node,int l,int r){
	tree[node].l=l,tree[node].r=r;
	tree[node].add=0,tree[node].mul=1;
	if (l==r){
		tree[node].sum=tree[node].sum2=tree[node].sum3=0;
		return;
	}
	build(node*2,l,(l+r)/2);
	build(node*2+1,(l+r)/2+1,r);
	tree[node].sum=(tree[node*2].sum+tree[node*2+1].sum)%MOD;
	tree[node].sum2=(tree[node*2].sum2+tree[node*2+1].sum2)%MOD;
	tree[node].sum3=(tree[node*2].sum3+tree[node*2+1].sum3)%MOD;
}
void PushDown(int node){
	if (tree[node].add==0 && tree[node].mul==1)
		return;

	tree[node*2].sum3=(tree[node].mul*tree[node].mul%MOD*tree[node].mul%MOD*tree[node*2].sum3%MOD + 3*tree[node].mul*tree[node].mul%MOD*tree[node].add%MOD*tree[node*2].sum2%MOD + 3*tree[node].mul*tree[node].add%MOD*tree[node].add%MOD*tree[node*2].sum%MOD + (tree[node*2].r-tree[node*2].l+1)*tree[node].add%MOD*tree[node].add%MOD*tree[node].add%MOD)%MOD;
	tree[node*2].sum2=(tree[node*2].sum2*tree[node].mul%MOD*tree[node].mul%MOD + 2*tree[node].add*tree[node].mul%MOD*tree[node*2].sum%MOD + (tree[node*2].r-tree[node*2].l+1)*tree[node].add%MOD*tree[node].add%MOD)%MOD;
	tree[node*2].sum=(tree[node*2].sum*tree[node].mul + tree[node].add*(tree[node*2].r-tree[node*2].l+1)%MOD)%MOD;

	tree[node*2+1].sum3=(tree[node].mul*tree[node].mul%MOD*tree[node].mul*tree[node*2+1].sum3%MOD + 3*tree[node].mul*tree[node].mul%MOD*tree[node].add%MOD*tree[node*2+1].sum2%MOD + 3*tree[node].mul*tree[node].add%MOD*tree[node].add%MOD*tree[node*2+1].sum%MOD + (tree[node*2+1].r-tree[node*2+1].l+1)*tree[node].add%MOD*tree[node].add%MOD*tree[node].add%MOD)%MOD;
	tree[node*2+1].sum2=(tree[node*2+1].sum2*tree[node].mul%MOD*tree[node].mul%MOD + 2*tree[node].add*tree[node].mul%MOD*tree[node*2+1].sum%MOD + (tree[node*2+1].r-tree[node*2+1].l+1)*tree[node].add%MOD*tree[node].add%MOD)%MOD;
	tree[node*2+1].sum=(tree[node*2+1].sum*tree[node].mul%MOD + tree[node].add*(tree[node*2+1].r-tree[node*2+1].l+1)%MOD)%MOD;

	tree[node*2].mul=(tree[node*2].mul*tree[node].mul)%MOD;
	tree[node*2].add=(tree[node*2].add*tree[node].mul%MOD+tree[node].add)%MOD;

	tree[node*2+1].mul=(tree[node*2+1].mul*tree[node].mul)%MOD;
	tree[node*2+1].add=(tree[node*2+1].add*tree[node].mul%MOD+tree[node].add)%MOD;

	tree[node].add=0;
	tree[node].mul=1;
}
void Add(int node,int l,int r,int v){
	if (tree[node].l>r || tree[node].r<l)
		return;
	if (l<=tree[node].l && tree[node].r<=r){
		tree[node].sum3=(tree[node].sum3+3*tree[node].sum2%MOD*v%MOD + 3*tree[node].sum%MOD*v%MOD*v%MOD + (tree[node].r-tree[node].l+1)*v%MOD*v%MOD*v%MOD)%MOD;
		tree[node].sum2=(tree[node].sum2+2*tree[node].sum*v%MOD+(tree[node].r-tree[node].l+1)*v%MOD*v%MOD)%MOD;
		tree[node].sum=(tree[node].sum+v*(tree[node].r-tree[node].l+1)%MOD)%MOD;
		tree[node].add=(tree[node].add+v)%MOD;
		return;
	}
	if (tree[node].l==tree[node].r)
		return;
	PushDown(node);
	Add(node*2,l,r,v);
	Add(node*2+1,l,r,v);
	tree[node].sum=(tree[node*2].sum+tree[node*2+1].sum)%MOD;
	tree[node].sum2=(tree[node*2].sum2+tree[node*2+1].sum2)%MOD;
	tree[node].sum3=(tree[node*2].sum3+tree[node*2+1].sum3)%MOD;
}
void Mul(int node,int l,int r,int v){
	if (tree[node].l>r || tree[node].r<l)
		return;
	if (l<=tree[node].l && tree[node].r<=r){
		tree[node].sum3=(tree[node].sum3*v%MOD*v%MOD*v%MOD)%MOD;
		tree[node].sum2=(tree[node].sum2*v%MOD*v)%MOD;
		tree[node].sum=(tree[node].sum*v)%MOD;
		tree[node].add=(tree[node].add*v)%MOD;
		tree[node].mul=(tree[node].mul*v)%MOD;
		return;
	}
	if (tree[node].l==tree[node].r)
		return;
	PushDown(node);
	Mul(node*2,l,r,v);
	Mul(node*2+1,l,r,v);
	tree[node].sum=(tree[node*2].sum+tree[node*2+1].sum)%MOD;
	tree[node].sum2=(tree[node*2].sum2+tree[node*2+1].sum2)%MOD;
	tree[node].sum3=(tree[node*2].sum3+tree[node*2+1].sum3)%MOD;
}
void Change(int node,int l,int r,int v){
	if (tree[node].l>r || tree[node].r<l)
		return;
	if (l<=tree[node].l && tree[node].r<=r){
		tree[node].sum3=((tree[node].r-tree[node].l+1)*v%MOD*v%MOD*v%MOD)%MOD;
		tree[node].sum2=((tree[node].r-tree[node].l+1)*v%MOD*v%MOD)%MOD;
		tree[node].sum=((tree[node].r-tree[node].l+1)*v)%MOD;
		tree[node].add=v%MOD;
		tree[node].mul=0;
		return;
	}
	if (tree[node].l==tree[node].r)
		return;
	PushDown(node);
	Change(node*2,l,r,v);
	Change(node*2+1,l,r,v);
	tree[node].sum=(tree[node*2].sum+tree[node*2+1].sum)%MOD;
	tree[node].sum2=(tree[node*2].sum2+tree[node*2+1].sum2)%MOD;
	tree[node].sum3=(tree[node*2].sum3+tree[node*2+1].sum3)%MOD;
}
ll query(int node,int l,int r,int p){

	if (tree[node].l==l && tree[node].r==r){
		if (p==1)
			return tree[node].sum;
		if (p==2)
			return tree[node].sum2;
		if (p==3)
			return tree[node].sum3;
	}
	PushDown(node);
	int mid=(tree[node].l+tree[node].r)/2;
	if (r<=mid)
		return query(node*2,l,r,p);
	else if (l>mid)
		return query(node*2+1,l,r,p);
	else
		return (query(node*2,l,mid,p)+query(node*2+1,mid+1,r,p))%MOD;
	/*
	if (tree[node].l>r || tree[node].r<l)
		return 0;
	if (l<=tree[node].l && tree[node].r<=r){
		if (p==1)
			return tree[node].sum;
		if (p==2)
			return tree[node].sum2;
		if (p==3)
			return tree[node].sum3;
	}
	if (tree[node].l==tree[node].r)
		return 0;
	PushDown(node);
	return (query(node*2,l,r,p)+query(node*2+1,l,r,p))%MOD;
	*/
}
void Debug(int node){
	/*for (int i=0;i<4*node;i++)
		printf("%lld ",tree[i].sum );
	printf("\n");
	for (int i=0;i<4*node;i++)
		printf("%lld ",tree[i].sum2 );
	printf("\n");
	*/
	for (int i=0;i<200;i++)
		printf("%lld ",tree[i].sum3 );
	printf("\n");
}
int main(){
	int n,m,op,x,y,c,p;
	while (~scanf("%d%d",&n,&m)){
		if (n==0 && m==0) break;
		build(1,1,n);
		while (m--){
			scanf("%d%d%d%d",&op,&x,&y,&c);
			if (op==1)
				Add(1,x,y,c%MOD);
			if (op==2)
				Mul(1,x,y,c%MOD);
			if (op==3)
				Change(1,x,y,c%MOD);
			if (op==4)
				printf("%lld\n",query(1,x,y,c));
			//Debug(n);
		}
	}

	return 0;
}

/*
10000 100
2 56 59 100
1 564 1254 10000
2 7 800 2
3 1 600 9999
4 5 10000 3
2 102 5645 9999
4 568 789 3
4 1 2 1
4 500 1000 1
4 500 1000 2
4 500 1000 3

*/



CXL技术入门:从PCIe到高性能计算的桥梁(附最新2.0协议解析) 本文深入解析CXL技术如何作为PCIe的进化版,成为高性能计算的关键桥梁,特别聚焦CXL 2.0协议的关键升级。从技术架构、三大子协议到典型应用场景,全面介绍CXL在缓存一致性、内存共享等方面的优势,帮助开发者快速掌握这一前沿技术。 阅读详情

相关推荐

Gazebo仿真UUV水下机器人:从环境搭建到避障算法实战

本文详细介绍了使用Gazebo仿真平台进行UUV水下机器人开发的全流程,涵盖从环境搭建、uuv_simulator配置、传感器集成到核心避障算法实战。通过搭建水下仿真实验室并实现基于激光雷达数据的反应式避障算法,为水下机器人算法验证与开发提供了高效、低成本的解决方案。

weixin_28840591的博客 263

hdu 4578:Transformation

线段树

weixin_46266058的博客 350

【AI基础学习系列】二十一、一文搞懂GPT

本文系统介绍了GPT(Generative Pre-trained Transformer)模型的核心内容。首先阐述了GPT的本质是基于Transformer的预训练语言模型,其创新在于使用单向Transformer编码器。其次详细解析了GPT架构,包括输入层的Tokenization和Embedding处理、Transformer解码器堆叠的核心组件(自注意力机制、前馈神经网络等)以及预训练和微调两阶段训练过程。接着说明了GPT的工作原理:通过无监督预训练学习语言统计规律,再结合有监督微调适应具体任务。

ASH_GUARDIAN的博客 1687

[HDU - 4578]Transformation(线段树+多重懒标记)

[HDU - 4578]Transformation(线段树+多重懒标记)

Turing_Sheep的博客 667

android11.0 Launcher3 高端定制之循环滑动

待机界面可以向左、向右循环切换页面 效果图 修改清单 packages/apps/Launcher3/res/values-zh-rCN/strings.xml packages/apps/Launcher3/res/values/config.xml packages/apps/Launcher3/res/values/strings.xml packages/apps/Launcher3/res/xml/launcher_preferences.xml packages/apps/Launc

cczhengv 1548

LeRobot — 基于 PyTorch 的真实世界机器人学习框架(一)- 核心框架模块解析

LeRobot 是一个开源的机器人学习框架,由 Hugging Face 开发,旨在降低机器人学的准入门槛。该框架提供完整的机器学习流程支持,包括数据采集、训练、评估和部署。核心模块涵盖数据集标准化、策略算法、硬件抽象和强化学习组件,采用模块化设计实现灵活扩展。通过集成 Hugging Face Hub,用户可以轻松共享数据集和预训练模型。LeRobot 特别注重真实世界的机器人应用,支持多种前沿算法如模仿学习、视觉语言动作模型等,并提供统一的硬件接口和仿真环境适配。

熊猫小妖的AI世界 171

HDU4578 题解(线段树+耐心)

传送门(vjudge):HDU4578。支持区间加,区间乘,区间赋值;查询区间和、平方和、立方和。没啥好犹豫的,肯定是线段树,但是这题考察了我们对懒标记的理解。线段树板子的懒标记有两个, lz1lz_1lz1​ 是乘标记,lz2lz_2lz2​ 是加标记,那么下传懒标记的时候就是:s←s×lz1+lz2×(r−l+1)s\gets s \times lz_1 + lz_2 \times (r-l+1)s←s×lz1​+lz2​×(r−l+1)你有没有想过为什么?∑(ai×b+c)=∑ai×b+∑c=b×∑a

XES_ChenWenxin的博客 1297

MyBatis-Plus 实战:敏感字段自动加解密支持模糊查询

本文基于MyBatis-Plus框架提出了一种全链路敏感字段加密方案。通过自定义TypeHandler实现数据入库自动加密和查询自动解密,结合重写LambdaQueryWrapper处理查询条件加密,并适配多种查询方式。方案核心包括:1)AESUtil工具类提供加解密基础能力;2)EncryptTypeHandler实现字段类型转换;3)实体类通过注解配置加密字段。该方案在保证数据安全的同时,对业务代码侵入性小,支持姓名、手机号等敏感信息的全流程加密处理,满足系统开发的安全需求。

蔡定努 596

HDU 4578(线段树)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4578   题目大意:有四个操作,1、对l到r数字全加c 2、对l到r数字全乘以c 3、对l到r数字全变成c 4.查询l到r中数字p次方和   题目思路:操作相当多,但是我们可以把他简化成两个:加和乘。对于一个乘可以理解成乘标记*这个数字,同时加标记*这个数字。如果只有一个加,那就直接加标记+这...

smilestruggler_Fly To Higher 1001

SAP项目中 Waterfall vs Agile 的深度对比分析背景:方法论的演进SAP项目实施方法论经历了显著的代际更替。早期以 ASAP(Accelerated SAP) 为代表,采用经典瀑

本文对比分析了SAP项目实施中瀑布模型(ASAP)与敏捷方法(SAP Activate)的核心差异。瀑布模型采用线性流程,需求固定但变更成本高;敏捷方法则通过迭代开发实现动态调整,强调最佳实践和用户持续参与。文章指出,SAP系统的复杂性使纯粹敏捷难以实施,需在标准化与定制化间取得平衡。最终建议根据项目特性选择方法论:稳定需求适用瀑布模型,变化频繁则推荐敏捷,而SAP Activate本质上是两者的结构化融合,代表未来趋势。关键在于匹配项目实际需求,而非盲目追随方法论潮流。

金牌架构师 345

微信小程序 - 实现身份证OCR识别人像面与国徽面并提取字段信息,详解从手机相册选取或打开摄像头拍照上传身份证正反面图片ocr文字识别数据填充表单(提供免费纯前端ocr识别插件+百度OCR识别API)

微信小程序身份证识别,微信小程序身份证拍照、上传并OCR识别,微信小程序实现OCR扫描识别,微信小程序识别身份证免费插件,微信小程序实现身份证识别功能。ocr识别插件。微信身份证拍照后进行ocr识别,微信小程序OCR扫描识别身份证,OCR身份证实名认证+图片上传+拍照上传图片,微信小程序之身份证照片正反上传,小程序OCR身份证识别,微信小程序实现文字识别-ocr插件,微信小程序利用百度AI实现扫描身份证获取信息功能,基于微信小程序OCR插件实现身份证拍照、上传并OCR识别的示例demo,将上传的照片传到服务

🏆 前端领域优质创作者 8133

hdu4578线段树多种延迟标记

hdu4578Transformation,要求支持3种修改操作与3种查询操作。 /* 数组A[1...N],一共有4种操作 1 x y c:A[x...y]增加c 2 x y c:A[x...y]乘以c 3 x y c:A[x...y]全都变成c 4 x y p:求SIGMA(Ai^p) x<=i<=y,1<=p<=3 建...

RBS的专栏 498

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

HDU4578 Transformation

HDU4578 Transformation Yuanfang is puzzled with the question below: There are n integers, a1, a2, …, an. The initial values of them are 0. There are four kinds of operations. Operation 1: Add c to each number between ax and ay inclusive. In other words, do

leihao-lester 255

假人有限元模型

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

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

HDU_4578_线段树多延迟标记

HDU 4578 此题有2种延迟标记 题意: 1 x y val表示在区间[x,y]的每个值增加val 2 x y val表示在区间[x,y]每个值乘val 3 x y val表示将区间[x,y]上的每个值都修改为val 4 x y val表示查询区间[x,y]上的每个值的p次幂的和 每个值看做ax+b,那么给线段树开2个延迟标记, add用来加(代表b) mult表示乘(代表a) 区...

_llc的博客 244

HDU - 4578 Transformation 【线段树】

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4578 题目比较麻烦,取模要细心一点。 区间加,乘,覆盖问题不是很大,比较麻烦的就是求的和的部分,因为p只取1,2,3,所以还是有可操作性的。 假设只有3个数a, b ,c。 如果对这三个数做加的操作,那么 p = 2,有 (a+1)^2 + (b+1)^2 + (c+1)^2 。把这个式子的平...

Y390d的博客 160

Transformation HDU - 4578

Transformation HDU - 4578 题意: 选定一段连续区间[l,r],有三种操作: 操作1:对区间内值+c 操作2:对区间内值*c 操作3:将区间内的值都改为c 操作4:查询区间内每个数p次方的和 p=1,2,3 题解: 参考题解 加强版线段树,对于本题需要三个标记,add的加法标记,mul的乘法标记,alt的修改标记,因为p=1,2,3,所以我们用sum1,sum2,sum3分别表示一次方和,平方和,立方和 然后我们要确定标记的优先级,alt第一,mul第二,add第三,pushdown

qq_35975367的博客 271

hdu 4578 线段树(标记处理)

Transformation Time Limit: 15000/8000 MS (Java/Others)Memory Limit: 65535/65536 K (Java/Others) Total Submission(s): 4095Accepted Submission(s): 1008 Problem Description Yu...

diaocuiguo2493的博客 176

Transformation( HDU - 4578 ,多重懒惰标记线段树 + 思维)

一.题目链接: HDU-4578 二.题目大意: n 个数 a[1 ~ n]. 现有 m 次 4 种操作. 1 l r c:a[l ~ r] 都 + c 2 l r c:a[l ~ r] 都 × c 3 l r c:a[l ~ r] 都变为 c 4 l r p:查询(p = {1, 2, 3}) 三.分析: 由上述公式便可得每次更新后的 [1, 3]次幂的和....

The___Flash的博客 318

HDU - 4578 Transformation(线段树)

异常变态的正常线段树。给你三种操作,三种输出方式: 1.让l~r区间的所有值加c; 2.让l~r区间的所有值乘c; 3.让l~r区间的所有值变成c; 4.让l~r区间的所有值都先求p(1~3)次方,然后求和输出。 别人都是一看题懵逼好简单操作好复杂,我就比较优秀,一看题就懵逼感觉很难不知道怎么做,我对不起这几天努力学的线段树,对不起。其实我考虑到分三种lazy数组,三种ans数组(正常大...

qq_38367681的博客 1016

【HDU 4578 --- Transformation】线段树

【HDU 4578 --- Transformation】 Description Yuanfang is puzzled with the question below: There are n integers, a 1, a 2, …, a n. The initial values of them are 0. There are four kinds of operations. Ope...

来日浅谈的博客 587

【区间更新+多种操作】K - Transformation HDU - 4578

K - Transformation HDU - 4578 Yuanfang is puzzled with the question below:  There are n integers, a 1, a 2, …, a n. The initial values of them are 0. There are four kinds of operations.  Operation 1:...

qq_41037114的博客 507

hdu4578——线段树多种操作

题目链接:https://vjudge.net/problem/HDU-4578#author=hzoi2017_csm Description Yuanfang is puzzled with the question below: There are n integers, a 1, a 2, …, a n. The initial values of them are 0. The...

mumei的博客 503

HDU - 4578 Transformation

HDU - 4578 Transformation 题 意:给你n个数字,开始都是0,m次操作,1 x y p:区间[x,y]每个数都加上p。2 x y c :区间[x,y]全部都乘p,3 x y c.将区间[x,y]的值全部都设为c。4 x y p,查询[x,y]所有值的p次方和。 数据范围: 1&lt;=n,m&lt;=1e5 1&lt;=c&lt;=1e4 x,y&lt;=n ...

子灬丶逾 378

HDU 4578 Transformation(线段树乱维护)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4578 解题思路: ①各种标记,用到哪下放到哪。 肯定是能想到用各种标记维护的,关键是标记之间会相互影响。 现在有三个标记: mtag维护乘法标记,初值为1 add维护加法标记,初值为0 isset维护区间是否用一个数覆盖 操作1,如果加法标记有数值,那么让它的值乘以乘法标记,这样下次计...

shadiao.的博客 175

hdu 4578 Transformation

题意:给你一个数组,初始值为零,有四种操作 (1)"1 x y c",代表 把区间 [x,y] 上的值全部加c (2)"2 x y c",代表 把区间 [x,y] 上的值全部乘以c (3)"3 x y c" 代表 把区间 [x,y]上的值全部赋值为c (4)"4 x y p" 代表 求区间 [x,y] 上值的p次方和1 因为P只有1到3,(x+c)^2=(x^2)+(2*x*c+c^2)

3157

Transformation - HDU 4578 - 线段树

Transformation - HDU 4578 - 线段树题目描述:  Yuanfang is puzzled with the question below:  There are n integers, a 1, a 2, …, a n. The initial values of them are 0. There are four kinds of operations.   Opera

LucienShui 983
上一篇: 线段树多lazy-tag(两个)
下一篇: 并查集(初级)小结
JinbaoSite0144
博客等级 码龄12年 231粉丝 157原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值