P2357我为什么TLE???!!!在线等,挺急的
以下是我的代码:
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=200005;
int n,m,c[N],ans;
inline int Read(){
int x=0,f=1;
char c=getchar();
while(!isdigit(c)){
if(c=='-')f=-1;
c=getchar();
}
while(isdigit(c)){
x=x*10+c-48;
c=getchar();
}
return x*f;
}
int lowbit(int x){
return x&(-x);
}
void change(int p,int v){
while(p<=n){
c[p]+=v;
p+=lowbit(p);
}
}
int query(int p){
int res=0;
while(p){
res+=c[p];
p-=lowbit(p);
}
return res;
}
void change1(int l,int r,int k){
for(int i=l;i<=r;i++){
int j=i;
while(j<=n){
c[j]+=k;
j+=lowbit(j);
}
}
}
void treea(){
n=Read();m=Read();
for(int i=1;i<=n;i++){
int x=Read();
change(i,x);
}
while(m--){
int op;
op=Read();
if(op==1){
int l,r,k;
l=Read();r=Read();k=Read();
change1(l,r,k);
}
else if(op==2){
int k;
k=Read();
change(1,k);
}
else if(op==3){
int k;
k=Read();
change(1,-k);
}
else if(op==5){
printf("%lld\n",query(1));
}
else if(op==4){
int l,r;
l=Read();r=Read();
ans=query(r)-query(l-1);
printf("%lld\n",ans);
}
}
}
signed main(){
treea();
return 0;
}