//区间修改,区间查询 - st
struct _BIT{
int N;
ll C[MAXN],C2[MAXN]; //分别记录d[i]和d[i]i
int lowbit(int x){return x&(-x);}
void init(int n) //初始化共有n个点
{
N=n;
memset(C,0,sizeof(C));
memset(C2,0,sizeof(C2));
}
void add(int pos,ll val)
{
for(int i=pos;i<=N;i+=lowbit(i)) C[i]+=val,C2[i]+=valpos;
}
void range_add(int l,int r,ll x) //区间[l,r]加上x
{
add(l,x);
add(r+1,-x);
}
ll ask(int pos)
{
ll ret=0;
for(int i=pos;i>0;i-=lowbit(i)) ret+=(pos+1)*C[i]-C2[i];
return ret;
}
ll range_ask(int l,int r) //查询区间[l,r]的和
{
return ask(r)-ask(l-1);
}
}BIT;