Vsinger_洛天依 @ 2023-10-10 17:12:59
谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢
#include<bits/stdc++.h>
using namespace std;
struct node
{
int l,r;
int dat;
}t[0x66ccf];
int ant[0x66ccf];
void APJ(int a,int b,int c){
t[a].l=b;
t[a].r=c;
if(b==c){
t[a].dat=ant[b];
return;
}
int mid=(b+c)/2;
APJ(a*2,b,mid);
APJ(a*2+1,mid+1,c);
t[a].dat=t[2*a].dat+t[2*a+1].dat;
}
void Soytony(int a,int b,int c){
if(t[a].l==b){
t[a].dat=c;
return;
}
int mid=(b+c)/2;
if(b<=mid){
Soytony(a*2,b,c);
}
else{
Soytony(a*2+1,b,c);
}
t[a].dat=t[2*a].dat+t[2*a+1].dat;
}
long long K8he(int a,int b,int c){
if(t[a].l>=b && t[a].r<=c){
return t[a].dat;
}
long long jijidawang=0;
if(t[a].l>=b){
jijidawang+=K8he(2*a,b,c);
}
if(t[a].r<=c){
jijidawang+=K8he(2*a+1,b,c);
}
return jijidawang;
}
int main(){
int a,b;
cin>>a>>b;
for(int i=1;i<=a;i++){
cin>>ant[i];
}
APJ(1,1,b);
for(int i=1;i<=b;i++){
int c;
cin>>c;
if(c==1){
int x,y,z;
cin>>x>>y>>z;
for(int j=x;j<=y;j++){
Soytony(1,j,z);
}
}
else{
int x,y;
cin>>x>>y;
cout<<K8he(1,x,y)<<endl;
}
}
}
评测记录:here
by LuoTianyi_Official @ 2023-10-10 17:31:09
@FatOldEight 把同学作为变量名怎么你了(
by hjqhs @ 2023-10-10 17:31:48
好好好 区间修改把区间里所有数依次单点修改了一遍
by xuhaotian @ 2023-10-10 17:35:10
建议改善一下马蜂
by HugeSB @ 2023-10-10 17:56:48
这样,你去线段树1/2里看看题解,然后自己照着写一个,然后关掉题解在草稿纸上默一遍伪代码,然后就AC了(线段树2、3同理)