线段树模板

 单纯的模板

区间求和 区间最值 区间加法 点加法

通过区间求和或区间最值 可以求点值

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[100010];
struct T{
	ll lt,rt;
	ll sum,mx,mn,lazy;
}tr[400010];
void pushup(ll root){//向下传递 
	ll s1=root<<1,s2=root<<1|1;
	tr[root].sum=tr[s1].sum+tr[s2].sum;
	tr[root].mx=max(tr[s1].mx,tr[s2].mx);
	tr[root].mn=min(tr[s1].mn,tr[s2].mn);
}
void ct(ll g,ll l,ll r){//创建 
	tr[g].lt=l,tr[g].rt=r;
	if(l==r){tr[g].sum=a[l]; tr[g].mx=tr[g].mn=a[l]; return;}
	ll mid=(l+r)>>1;
	ct(g<<1,l,mid);
	ct(g<<1|1,mid+1,r);
	pushup(g);
}
void updata(ll g,ll pos,ll val){//将pos位置的值加上val 使用时配合a数组,记得更新a数组的值 
	if(tr[g].lt==tr[g].rt&&tr[g].lt==pos)
		{tr[g].sum+=val; tr[g].mx+=val; tr[g].mn+=val; return;}
	ll mid=(tr[g].lt+tr[g].rt)>>1;
	if(pos<=mid) updata(g<<1,pos,val);
	else updata(g<<1|1,pos,val);
	pushup(g);
}
ll qmx(ll g,ll x,ll y){//qmx[1,x,y] 取[x,y]的最大值
	if(tr[g].lt==x&&tr[g].rt==y) return tr[g].mx;
	ll mid=(tr[g].lt+tr[g].rt)>>1;
	if(y<=mid) return qmx(g<<1,x,y);
	else if(x>mid) return qmx(g<<1|1,x,y);
	else {ll a=qmx(g<<1,x,mid);ll b=qmx(g<<1|1,mid+1,y);return max(a,b);}
}
ll qmn(ll g,ll x,ll y){//qmn[1,x,y] 取[x,y]的最小值
	if(tr[g].lt==x&&tr[g].rt==y) return tr[g].mn;
	ll mid=(tr[g].lt+tr[g].rt)>>1;
	if(y<=mid) return qmn(g<<1,x,y);
	else if(x>mid) return qmn(g<<1|1,x,y);
	else{ll a=qmn(g<<1,x,mid);ll b=qmn(g<<1|1,mid+1,y);return min(a,b);}	
}
void change(ll h,ll l,ll r,ll s,ll e,ll k){
	if(l==s&&r==e){tr[h].lazy+=k; return;}
	tr[h].sum+=(e-s+1)*k;
	ll mid=(l+r)/2;
	if(s>=mid+1) change(h*2+1,mid+1,r,s,e,k);
	else if(e<=mid) change(h*2,l,mid,s,e,k);
	else {change(h*2,l,mid,s,mid,k);change(h*2+1,mid+1,r,mid+1,e,k);}
}
ll qsum(ll g,ll x,ll y){//qsum[1,x,y] 取[x,y]的和 
	if(tr[g].lt==x&&tr[g].rt==y) return tr[g].sum+tr[g].lazy*(tr[g].rt-tr[g].lt+1);
	ll mid=(tr[g].lt+tr[g].rt)>>1;
	ll ret=0;
	if(tr[g].lazy){
		tr[g].sum+=tr[g].lazy*(tr[g].rt-tr[g].lt+1);
		change(g*2,tr[g].lt,mid,tr[g].lt,mid,tr[g].lazy);
		change(g*2+1,mid+1,tr[g].rt,mid+1,tr[g].rt,tr[g].lazy);
		tr[g].lazy=0;
	}
	if(y<=mid)return qsum(g<<1,x,y);
	else if(x>mid)return qsum(g<<1|1,x,y);
	else{ret+=qsum(g<<1,x,mid); ret+=qsum(g<<1|1,mid+1,y); return ret;}
}
void qjup(int root, int nstart, int nend, int ustart, int uend, int addVal)
{//qjup(1,1,n,x,y,k) [x,y]区间内的数均加k 
    if(ustart > nend || uend < nstart) return ;
    if(ustart <= nstart && uend >= nend)
    {
        tr[root].sum += addVal;
        tr[root].mn += addVal;
        tr[root].mx += addVal;
        return ;
    }
   	pushup(root); 
    int mid = (nstart + nend) / 2;
    qjup(root*2, nstart, mid, ustart, uend, addVal);
    qjup(root*2+1, mid+1, nend, ustart, uend, addVal);
    
    tr[root].mn = min(tr[root*2].mn , tr[root*2+1].mn);
    tr[root].mx = max(tr[root*2].mx, tr[root*2+1].mx);
    tr[root].sum = tr[root*2].sum + tr[root*2+1].sum;
}

int main(){
	ll m,n;
	cin>>n>>m;
	for(int i=1;i<=n;i++) cin>>a[i];//初始化a数组 
	ct(1,1,n);
	while(m--)
	{//各种命令 
		ll p,x,y,k;
		cin>>p>>x>>y;
		if(p==1) y 
		{
		//	updata(1,x,y-a[x]);//updata 更新x位置+
		//	qjup(1,1,n,x,x,y-a[x]);//
			a[x]=y;//及时更新a数组 
		}
		else if(p==2) cout<<qsum(1,x,y)<<endl;
	
		else if(p==3)
		{
			cout<<qmx(1,x,y)<<endl;
		}
	}
	return 0;
}

 

内容概要:2025年大宗商品市场展望报告由世界银行发布,分析了能源、农业、金属和矿物、贵金属以及化肥等多个主要商品类别的市场发展与前景。报告指出,由于全球经济增长放缓和贸易紧张加剧,2025年大宗商品价格预计总体下降12%,2026年进一步下降5%,达到六年来的最低点。油价预计2025年平均为每桶64美元,2026年降至60美元,主要受全球石油消费放缓和供应增加的影响。农业商品价格预计2025年基本稳定,2026年下降3%,其中粮食和原材料价格分别下降7%和2%,但饮料价格上涨20%。金属价格预计2025年下降10%,2026年再降3%,特别是铜和铝价格将显著下跌。贵金属如黄金和白银因避险需求强劲,预计价格将继续上涨。报告还特别关注了疫情后大宗商品周期的变化,指出周期变得更短、更剧烈,主要受到宏观经济冲击、极端天气事件和地缘政治冲突的影响。 适用人群:对全球经济趋势、大宗商品市场动态及其对不同经济体影响感兴趣的政策制定者、投资者、分析师及研究机构。 使用场景及目标:①帮助政策制定者评估全球经济增长放缓对大宗商品市场的影响,从而调整经济政策;②为投资者提供有关未来大宗商品价格走势的风险提示,以便进行投资决策;③协助分析师和研究机构深入理解疫情后大宗商品市场的周期特征,识别潜在的投资机会和风险。 其他说明:报告强调,全球经济增长放缓、贸易紧张加剧以及地缘政治不确定性是影响大宗商品价格的主要因素。此外,极端天气事件和能源转型也对农业和能源商品市场产生了深远影响。报告呼吁各方关注这些结构性变化,并采取相应的风险管理措施。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cherish_lii

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值