HDU 4348 / SPOJ TTM To the moon [主席树]

Screenshot_2026-11-04-16-26-45-46.jpg 立即下载

Description

You‘ve been given N integers A[1], A[2],..., A[N]. On these integers, you need to implement the following operations:

  • C l r d: Adding a constant d for every {Ai | l <= i <= r}, and increase the timestamp by 1, this is the only operation that will cause the timestamp increase. 
  • Q l r: Querying the current sum of {Ai | l <= i <= r}.
  • H l r t: Querying a history sum of {Ai | l <= i <= r} in time t.
  • B t: Back to time t. And once you decide return to a past, you can never be access to a forward edition anymore.

 .. N, M ≤ 10^5, |A[i]| ≤ 10^9, 1 ≤ l ≤ r ≤ N, |d| ≤ 10^4 .. the system start from time 0, and the first modification is in time 1, t ≥ 0, and won't introduce you to a future state. 


题意:给出N个数的序列,有四种操作:

1.成段区间加D,此时的序列有一个时间T来表示它(每次操作1之后T+1)

2.询问当前序列区间和

3.询问T时刻序列的区间和

4.回到T时刻(这里比较坑,题意不是很清楚,下次T+1是从回到的时间开始,WA了无数遍)


解法:主席树可写,时空复杂度为NlogNlogN,算是模板题了,不赘述。考虑了一下,其实还可以线段树离线处理询问直接搞,时间复杂度为NlogN,空间为N,将T时刻的询问先存起来,等到了T时刻的时候直接把相关询问处理完(需要区分是第几次到T时刻),返回T时刻的时候,将前面做过的区间加重新减回去即可,因为每个相反的操作最多重新做一遍,所以复杂度依旧是NlogN。

主席树代码:

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<iostream>
#include<stdlib.h>
#include<set>
#include<map>
#include<queue>
#include<vector>
#include<bitset>
#pragma comment(linker, "/STACK:1024000000,1024000000")
template <class T>
bool scanff(T &ret){ //Faster Input
    char c; int sgn; T bit=0.1;
    if(c=getchar(),c==EOF) return 0;
    while(c!='-'&&c!='.'&&(c<'0'||c>'9')) c=getchar();
    sgn=(c=='-')?-1:1;
    ret=(c=='-')?0:(c-'0');
    while(c=getchar(),c>='0'&&c<='9') ret=ret*10+(c-'0');
    if(c==' '||c=='\n'){ ret*=sgn; return 1; }
    while(c=getchar(),c>='0'&&c<='9') ret+=(c-'0')*bit,bit/=10;
    ret*=sgn;
    return 1;
}
#define inf 1073741823
#define llinf 4611686018427387903LL
#define PI acos(-1.0)
#define lth (th<<1)
#define rth (th<<1|1)
#define rep(i,a,b) for(int i=int(a);i<=int(b);i++)
#define drep(i,a,b) for(int i=int(a);i>=int(b);i--)
#define gson(i,root) for(int i=ptx[root];~i;i=ed[i].next)
#define tdata int testnum;scanff(testnum);for(int cas=1;cas<=testnum;cas++)
#define mem(x,val) memset(x,val,sizeof(x))
#define mkp(a,b) make_pair(a,b)
#define findx(x) lower_bound(b+1,b+1+bn,x)-b
#define pb(x) push_back(x)
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;

#define NN 100100
#define MM 2500000

int n,qn,ql,qr;
int tot;
int lson[MM],rson[MM];
ll c[MM],add[MM];
ll a[NN];
int t[NN];
int build(int l,int r){
    int x=++tot;
    if(l!=r){
        int m=(l+r)>>1;
        lson[x]=build(l,m);
        rson[x]=build(m+1,r);
        c[x]=c[lson[x]]+c[rson[x]];
    }
    else c[x]=a[l];
    return x;
}
void update(int l,int r,int pre,int cur,ll val){
    lson[cur]=lson[pre];
    rson[cur]=rson[pre];
    c[cur]=c[pre];
    add[cur]=add[pre];
    if(l>=ql&&r<=qr){
        add[cur]+=val;
        if(l==r)c[cur]=a[l]+add[cur]*(r-l+1);
        else c[cur]=c[lson[cur]]+c[rson[cur]]+add[cur]*(r-l+1);
        return ;
    }
    int m=(l+r)>>1;
    if(m>=ql)update(l,m,lson[pre],lson[cur]=++tot,val);
    if(m<qr)update(m+1,r,rson[pre],rson[cur]=++tot,val);
    c[cur]=c[lson[cur]]+c[rson[cur]]+add[cur]*(r-l+1);

}
ll query(int l,int r,int x,ll d){
    if(l>=ql&&r<=qr)return c[x]+(r-l+1)*d;
    int m=(l+r)>>1;
    ll sum=0;
    if(m>=ql)sum+=query(l,m,lson[x],d+add[x]);
    if(m<qr)sum+=query(m+1,r,rson[x],d+add[x]);
    return sum;
}

char op[111];
int main(){
    scanff(n);
    scanff(qn);
    rep(i,1,n)scanff(a[i]);
    build(1,n);
    t[0]=1;
    int pre=0;
    int cur=0;
    rep(i,1,qn){
        scanf("%s",op);
        if(op[0]=='C'){
            ll val;
            scanff(ql);
            scanff(qr);
            scanff(val);
            t[++cur]=++tot;
            update(1,n,t[pre],t[cur],val);
            pre=cur;
        }
        if(op[0]=='B'){
            scanff(pre);
            cur=pre;
        }
        if(op[0]=='Q'){
            scanff(ql);
            scanff(qr);
            printf("%lld\n",query(1,n,t[pre],0));
        }
        if(op[0]=='H'){
            int k;
            scanff(ql);
            scanff(qr);
            scanff(k);
            printf("%lld\n",query(1,n,t[k],0));
        }
    }

}
/*
10 1000
1 2 3 4 5 6 7 8 9 10
Q 4 4
Q 1 10
Q 2 4
C 3 6 3
Q 2 4
*/






TG-2026-11-08-071400786.mp4 立即下载

相关推荐

互联网 Java 工程师进阶知识完全扫盲:涵盖高并发、分布式、高可用、微服务、海量数据处理等领域知识

互联网 Java 工程师进阶知识完全扫盲:涵盖高并发、分布式、高可用、微服务、海量数据处理等领域知识

HDU 4348 - To the moon

题目地址 :  http://acm.hdu.edu.cn/showproblem.php?pid=4348   2012多校第五场,1010题。   思路 :         其实很简单,线段树的区间查询、区间求和。       只是两个“查询第 t 次修改时的内容”、“恢复到 t 时刻”操作比较不好想。       我这里利用的是离线法。       先将“修改操作”和“查询操

诳人居 937

巴基斯坦进口贸易数据集5097类HS6商品六年

本数据集收录巴基斯坦2019至2024年六年间的年度进口贸易数据,覆盖5097个HS6编码商品类别,年度进口总额达500亿至800亿美元规模,完整捕捉疫情前基线、新冠疫情冲击、进口限制政策与能源价格波动等关键经济节点。高进口额品类包括石油馏分、原油、液化天然气、棕榈油与光伏太阳能设备。字段包含HS6商品名称、HS6编码及2019至2024各年度进口额(美元计价)。适用于能源与大宗商品进口依赖分析、增长率与波动性(CAGR)研究、宏观经济冲击建模,以及按HS两位章节(第27章矿物燃料、84/85章机械设备)展开的宏观行业聚合分析,也是国际贸易研究与时间序列分析课程的实用素材。数据许可:Apache 2.0。

2019-3-1-安装-Sureface-Hub-系统-Windows-10-team-PPIPro-系统

title author date CreateTime categories 安装 Sureface Hub 系统 Windows 10 team PPIPro 系统 lindexi 2019-03-01 09:32:28 +0800 2019-01-11 17:44:24 +0800 ...

lindexi 737

Crystal Designer 2020 SP2 CR202002P-400-70005715

Crystal Designer 2020 SP2 CR202002P_400-70005715

好的,技术转移行业资深专家为您撰写如下。.docx

好的,技术转移行业资深专家为您撰写如下。

HDU 4348 SPOJ 11470 To the moon

Vjudge题面 Time limit 2000 ms Memory limit 65536 kB OS Windows Source 2012 Multi-University Training Contest 5 SPOJ原版题面 Background To The Moon is a independent game released in November 2011, it is a ...

weixin_30466953的博客 228

产业园区如何高效匹配产业需求与科技成果?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

HDU 4348 / SPOJ TTM - To the moon

终于过了。。感谢xiaodao提供测试数据,然后最终找到了一个十分ruozhi的BUG。。。= =,坑爹。。没什么好说的,直接上主席树的干活。。。下面是HDU的代码,如果是SPOJ自行把%I64d换成%lld继续干活。。 1 /* 2 ID:esxgx1 3 LANG:C++ 4 PROG:hdu4348 5 */ 6 #include <c...

weixin_30414305的博客 152

国央企创新负责人如何系统化管理科技成果与创新资源?.docx

国央企创新负责人如何系统化管理科技成果与创新资源?

【动态多智能体系统的通信感知编队控制】一种新颖的通信感知编队控制策略,用于动态多智能体系统研究(Matlab代码、Python代码实现)

内容概要:文档名为《Plecs全桥LLC谐振变换器仿真模型.txt》,但其内容并未深入介绍Plecs环境下全桥LLC谐振变换器的具体建模与仿真过程,而是呈现为一份涵盖多领域科研主题的资源列表。文档内容广泛涉及多智能体系统控制、无人机路径规划、电力电子变换器、状态估计、信号处理、优化算法等研究方向,并多次提及Matlab/Simulink、Python等工具的代码实现。整体来看,该文档更像是一份科研项目目录或技术资源索引,重点推介了包括LLC谐振变换器在内的多种控制系统与电力电子仿真模型,但对标题所述核心内容缺乏详尽的技术描述与实现细节。; 适合人群:电力电子、自动化、控制工程、信号处理及多智能体系统等相关领域的研究生、科研人员与工程技术人员。; 使用场景及目标:①为科研工作者提供跨学科的技术方向参考与研究选题灵感;②获取电力系统、无人机控制、信号处理等领域成熟的Matlab/Simulink或Python仿真代码资源,用于算法验证与模型复现。; 阅读建议:建议将此文档作为科研资源导航目录使用,读者可根据自身研究方向筛选感兴趣的主题,并通过文中提供的公众号或网盘链接获取完整的代码、仿真模型与配套资料进行深入学习与实践。

HDU 4348 SPOJ TTM To the moon(操作建树)

题意:给出一个序列,四种操作C l r d: Adding a constant d for every {Ai | l <= i <= r}, and increase the timestamp by 1, this is the only operation that will cause the timestamp increase. Q l r: Querying the current

每一次AC都是一种感动 509

产业园区运营负责人如何提升企业技术需求与科研资源的精准匹配效率?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

HDU 4348.To the moon SPOJ - TTM To the moon -可持久化线段树(带修改在线区间更新(增减)、区间求和、查询历史版本、回退到历史版本、延时标记不下放(空...

To the moon Time Limit: 4000/2000 MS (Java/Others)Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 8372Accepted Submission(s): 1986 Problem Description BackgroundTo The Moon...

weixin_30633949的博客 199

两相交错并联Boost电路仿真模型(Simulink仿真实现)

内容概要:本文档系统整理了电力电子与电力系统领域的多项Simulink仿真资源,重点围绕“两相交错并联Boost电路仿真模型”展开,涵盖其在高功率密度、低输入电流纹波等性能优化方面的建模与控制实现。资源集合不仅包括Boost类变换器,还广泛涉及LLC谐振变换器(半桥、全桥、多相交错)、PFC功率因数校正电路(图腾柱、维也纳拓扑)、双向DC-DC变换器(Buck-Boost、CLLC)、PWM整流器及DAB双有源桥等多种典型电力电子拓扑结构的闭环控制系统设计。每个模型均强调动态响应分析、均流控制、软开关技术与稳定性验证,适用于新能源发电、电动汽车V2G系统、储能能量管理及充电桩等前沿应用场景,体现了较强的工程实践价值与科研参考意义。; 适合人群:面向电气工程、自动化、电力电子与电力传动等相关专业的高校本科生、研究生,以及从事电源设计、新能源系统开发、车载充电机、工业变流器研发的工程技术人员,尤其适合具备电路理论基础和Simulink/Matlab仿真经验的学习者进一步深化系统建模与控制策略研究。; 使用场景及目标:① 深入理解交错并联Boost电路的工作原理及其在抑制输入电流纹波、提升效率方面的作用机制;② 掌握利用Simulink构建复杂电力电子系统的建模方法,开展控制器设计(如PI、双闭环、VOC、SVPWM)与动态性能仿真;③ 为毕业设计、科研课题或实际工程项目提供可复用的技术参考,支撑高性能DC-DC变换器与AC-DC整流系统的开发需求。; 阅读建议:建议结合文档中列出的LLC、PFC、双向DC-DC等配套仿真案例进行横向对比学习,深入把握不同拓扑间的共性与差异;同时推荐配合提供的Mathcad计算书、设计报告与参考文献,完成从参数设计、模型搭建到仿真验证的全流程实践,全面提升理论分析与工程应用相结合的能力。

交错并联图腾柱PFC变换器仿真设计(Simulink仿真实现)

内容概要:本文档聚焦于“交错并联图腾柱PFC变换器仿真设计(Simulink仿真实现)”这一核心技术主题,系统性地提供了基于Simulink平台的电力电子变换器建模与仿真资源,涵盖交错并联图腾柱PFC变换器的主电路拓扑结构、控制策略实现、动态性能分析及仿真验证全过程。文档不仅深入介绍了该变换器在高效率、低谐波、高功率因数方面的优势,还详细展示了其在均流控制、软开关实现、抗干扰能力等方面的仿真设计要点。同时,配套资源丰富,涵盖了多种典型电力电子系统案例,如三相PWM整流器、VIENNA整流器、LLC谐振变换器、双有源桥DAB变换器等,涉及PI双闭环、滞环控制、SVPWM调制、中点电压均衡、软开关技术等多种关键控制方法。此外,资源包还包含Mathcad计算书、Simulink/Plecs仿真模型、设计报告与参考文献,构建了从理论推导、参数设计到仿真验证的完整技术链条,便于用户快速掌握并复现先进拓扑的控制逻辑与系统设计流程。; 适合人群:面向具备电力电子、电气工程、自动化等相关专业背景,熟悉Matlab/Simulink仿真环境,从事新能源发电、电动汽车、工业电源、电能质量治理等方向的科研人员、高校研究生以及具有1-5年工作经验的电力电子工程师;尤其适合正在开展高效率PFC电路研究或需要完成相关课题设计的技术人员。; 使用场景及目标:①深入理解交错并联图腾柱PFC变换器的工作原理与建模方法,掌握其在提升系统效率与降低输入电流畸变方面的技术优势;②学习并实践高性能PFC电路的双闭环控制、均流策略与软启动设计,提升仿真调试与参数整定能力;③借助提供的标准化仿真模板、计算工具与完整案例,快速搭建类似拓扑系统,支撑科研论文复现、项目开发或课程设计,显著提高研发效率与设计可靠性。; 阅读建议:建议结合文档中列出的仿真模型与Mathcad计算书同步操作,优先按照资源目录顺序循序渐进学习,重点关注控制环路的设计逻辑、PI参数整定方法与系统稳定性判据;推荐通过网盘链接下载全部资料,动手修改模型参数并观察响应变化,以加深对控制策略本质的理解,实现从“看懂”到“会用”的转化。

上一篇: CodeForces 547E Mike and Friends [Fail树+树状数组]
下一篇: SPOJ D-query 区间不同数的个数 [在线主席树 or 离线树状数组]
GrassTreeFlower
博客等级 码龄11年 14粉丝 116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值