HDU4838 To the moon

本文介绍了一种基于线段树实现的区间更新和查询算法,适用于动态修改区间内元素值并快速查询区间和的场景。文章通过具体代码展示了节点结构定义、线段树构建、区间加法更新及查询操作等关键步骤。

http://acm.hdu.edu.cn/showproblem.php?pid=4348

#include"iostream"
#include"cstdio"
using namespace std;
const int maxn=1e5+5;
int Scan()
{
    int res = 0, flag = 0;
    char ch;
    if((ch = getchar()) == '-') flag = 1;
    else if(ch >= '0' && ch <= '9') res = ch - '0';
    while((ch = getchar()) >= '0' && ch <= '9')
        res = res * 10 + (ch - '0');
    return flag ? -res : res;
}
int N,M;
struct Tree
{
    int Ls,Rs,L,R,lazy;
    long long sum;
};
Tree tree[maxn<<4];
int root[maxn];
int tot,rt;
int Build(int L,int R)
{
    int id=++tot;
    tree[id].lazy=0;
    tree[id].L=L;
    tree[id].R=R;
    if(L==R)
    {
        tree[id].sum=Scan();
        return id;
    }
    int mid=(L+R)>>1;
    tree[id].Ls=Build(L,mid);
    tree[id].Rs=Build(mid+1,R);
    tree[id].sum=tree[tree[id].Ls].sum+tree[tree[id].Rs].sum;
    return id;
}
void Update(int id)
{
    int ls=tree[id].Ls;
    int rs=tree[id].Rs;

    tree[id].sum=tree[ls].sum+tree[rs].sum;
    if(tree[ls].lazy)tree[id].sum+=tree[ls].lazy*(tree[ls].R-tree[ls].L+1);
    if(tree[rs].lazy)tree[id].sum+=tree[rs].lazy*(tree[rs].R-tree[rs].L+1);
}
int Add(int id1,int L,int R,int v)
{
    int id2=++tot;
    tree[id2].L=tree[id1].L;
    tree[id2].R=tree[id1].R;
    tree[id2].lazy=tree[id1].lazy;

    if(L<=tree[id1].L&&R>=tree[id1].R)
    {
        tree[id2].Ls=tree[id1].Ls;
        tree[id2].Rs=tree[id1].Rs;
        tree[id2].sum=tree[id1].sum;
        tree[id2].lazy=tree[id1].lazy+v;
        return id2;
    }
    int mid=(tree[id1].L+tree[id1].R)>>1;
    if(R<=mid)
    {
        tree[id2].Ls=Add(tree[id1].Ls,L,R,v);
        tree[id2].Rs=tree[id1].Rs;
    }
    else if(L>mid)
    {
        tree[id2].Rs=Add(tree[id1].Rs,L,R,v);
        tree[id2].Ls=tree[id1].Ls;
    }
    else
    {
        tree[id2].Ls=Add(tree[id1].Ls,L,mid,v);
        tree[id2].Rs=Add(tree[id1].Rs,mid+1,R,v);
    }
    Update(id2);
    return id2;
}
long long Query(int id,int L,int R,int add)
{
    if(L<=tree[id].L&&R>=tree[id].R)return tree[id].sum+(R-L+1)*(add+tree[id].lazy);
    int mid=(tree[id].L+tree[id].R)>>1;
    if(R<=mid)return Query(tree[id].Ls,L,R,add+tree[id].lazy);
    else if(L>mid)return Query(tree[id].Rs,L,R,add+tree[id].lazy);
    else
    {
        return Query(tree[id].Ls,L,mid,add+tree[id].lazy)+Query(tree[id].Rs,mid+1,R,add+tree[id].lazy);
    }
}
int main()
{
//  freopen("2.txt","r",stdin); 
    char cmd;
    int L,R,v,T;
    while(cin>>N>>M)
    {
        tot=0;
        Build(1,N);
        root[0]=1;
        rt=0;
        while(M--)
        {
            cin>>cmd;
            if(cmd=='Q')
            {
                int L,R;
                L=Scan();
                R=Scan();
                cout<<Query(root[rt],L,R,0)<<"\n";
            }
            else if(cmd=='C')
            {
                L=Scan();
                R=Scan();
                v=Scan();
                rt++;
                root[rt]=Add(root[rt-1],L,R,v);
            }
            else if(cmd=='H')
            {
                L=Scan();
                R=Scan();
                T=Scan();
                cout<<Query(root[T],L,R,0)<<"\n";
            }
            else if(cmd=='B')
            {
                rt=Scan();
                tot=root[rt+1]-1;//不要这句就TLE,估计是超内存了 
            }
        }
    }
}
超声谐波成像中幅度调制聚焦超声引起的全场位移和应变的分析模型(Matlab代码实现)内容概要:本文主要介绍了一个关于超声谐波成像中幅度调制聚焦超声所引起全场位移和应变的分析模型,并提供了基于Matlab的代码实现。该模型旨在精确模拟和分析在超声谐波成像过程中,由于幅度调制聚焦超声作用于生物组织而产生的全场机械位移与应变分布,对于提高成像精度、理解组织力学特性以及辅助医学诊断具有重要意义。文中还列举了大量相关的科研仿真案例,涵盖智能优化算法、机器学习、路径规划、电力系统、信号处理等多个领域,展示了Matlab在科学研究与工程仿真中的广泛应用。 适合人群:具备一定Matlab编程基础,从事生物医学工程、超声成像、力学仿真或相关领域研究的研究生、科研人员及工程技术人员。 使用场景及目标:①用于超声弹性成像中的力学建模与仿真分析;②辅助理解聚焦超声在组织中引发的位移与应变机制;③为医学图像处理、疾病诊断(如肿瘤检测)提供量化力学依据;④作为科研教学与项目开发的技术参考。 阅读建议:建议读者结合Matlab代码深入理解模型实现细节,关注位移与应变的数值计算方法及可视化过程。同时可参考文档中提供的其他仿真案例,拓展跨学科研究思路,提升综合科研能力。
基于动态规划的微电网动态经济调度研究(Matlab代码实现)内容概要:本文围绕“基于动态规划的微电网动态经济调度研究”展开,结合Matlab代码实现,探讨了微电网在多约束条件下的优化调度问题。研究利用动态规划方法对微电网内部的分布式电源、储能系统及负荷进行协调优化,旨在降低运行成本、提高能源利用效率,并兼顾系统可靠性与环保性。文中详细介绍了模型构建过程、目标函数设计、约束条件设定及算法实现流程,并通过Matlab仿真验证了该方法的有效性与实用性。此外,文档还列举了大量相关研究主题与代码资源,涵盖电力系统优化、智能算法应用、新能源调度等多个方向,为后续研究提供了丰富参考。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的高校研究生、科研人员及从事能源优化调度相关工作的工程技术人员。; 使用场景及目标:①掌握动态规划在微电网经济调度中的建模与求解方法;②学习Matlab在电力系统优化中的实际编程实现技巧;③为开展微电网、综合能源系统等领域的科研项目提供算法支持与案例参考。; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,深入理解动态规划算法的实现细节,并可进一步扩展至多目标优化、不确定性建模等更复杂场景,提升科研创新能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值