题目链接: 题目
为什么我的代码过不了POJ3468?
#include<iostream>
#include<string>
//#include<bits/stdc++.h>
#define int long long
using namespace std;
int read(){
int x=0,f=1;
char c=getchar();
while(c<48||c>57){if(c=='-')f=-1;c=getchar();}
while(c>=48&&c<=57)x=(x<<1)+(x<<3)+(c^48),c=getchar();
return x*f;
}
int n=read(),m=read(),a,b,tr1[500002],tr2[500002];
int lowbit(int x){return x&-x;}
void add(int u,int x){for(int i=u;i<=n;i+=lowbit(i))tr1[i]+=x,tr2[i]+=(x*(u-1));}
int query(int x){
int sum=0;
for(int i=x;i;i-=lowbit(i))sum+=(x*tr1[i]-tr2[i]);
return sum;
}
signed main(){
for(int i=1;i<=n;i++)b=read(),add(i,b-a),a=b;
while(m--){
string op;
cin>>op;
if(op=="Q"){
int u=read(),v=read();
printf("%lld\n",query(v)-query(u-1));
}else{
int u=read(),v=read(),k=read();
add(u,k),add(v+1,-k);
}
}
return 0;
}