RT ,我调了特别久的树状数组。
用了一些dalao教的操作去做区间查询(线段树1),洛谷过了,但是学校OJ过不了(快读试过了)
(红圈框起来的是本人的提交记录)
就是这种毒瘤数据让我TLE
CODE:
#include<bits/stdc++.h>
using namespace std;
long long a[100001];
long long T_1[100001];
long long T_2[100001];
long long n,m;
long long lowbit(long long i){
return i&-i;
}
void modify(long long *T,long long x,long long y){
for(register long long i=x;i<=n;i+=lowbit(i)){
T[i]+=y;
}
}
long long find(long long *T,long long x){
long long ans=0;
for(register long long i=x;i;i-=lowbit(i)){
ans+=T[i];
}
return ans;
}
long long query(int i){
return 1ll*(i+1)*find(T_1,i)-find(T_2,i);
}
int cmd,x,y,k;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n>>m;
for(register long long i=1;i<=n;++i){
cin>>a[i];
modify(T_1,i,a[i]-a[i-1]);
modify(T_2,i,1ll*i*(a[i]-a[i-1]));
}
for(register long long i=1;i<=m;++i){
cin>>cmd;
if(cmd==1){
cin>>x>>y>>k;
modify(T_1,x,k);
modify(T_1,y+1,-k);
modify(T_2,x,1ll*x*k);
modify(T_2,y+1,1ll*-(y+1)*k);
}
else{
cin>>x>>y;
cout<<(query(y)-query(x-1))<<endl;
}
}
return 0;
}