8WA 2RE
P1438 无聊的数列
#include<bits/stdc++.h>
using namespace std;
#define N 4*1000100
struct shu
{
int l,r,num,tag;
}t[N];
int s=0;
int a[N];
int a1[N];
void build(int i,int l,int r)
{
t[i].l=l;
t[i].r=r;
if(l==r)
return ;
int mid=(l+r)/2;
build(i*2,l,mid);
build(i*2+1,mid+1,r);
}
int add(int i)
{
if(t[i].l==t[i].r)
{
t[i].num=a[t[i].r];
return t[i].num;
}
t[i].num=add(i*2)+add(i*2+1);
return t[i].num;
}
void push(int i)
{
if(t[i].tag>0)
{
t[i*2].tag+=t[i].tag;
t[i*2+1].tag+=t[i].tag;
t[i*2].num+=t[i].tag*(t[i*2].r-t[i*2].l+1);
t[i*2+1].num+=t[i].tag*(t[i*2+1].r-t[i*2+1].l+1);
t[i].tag=0;
}
}
void quxiu(int i,int l,int r,int k)
{
if(l<=t[i].l&&t[i].r<=r)
{
t[i].num+=k*(t[i].r-t[i].l+1);
t[i].tag+=k;
return ;
}
push(i);
if(l<=t[i*2].r)
quxiu(i*2,l,r,k);
if(t[i*2+1].l<=r)
quxiu(i*2+1,l,r,k);
t[i].num=t[i*2].num+t[i*2+1].num;
}
void danxiu(int i,int dis,int k)
{
if(dis>t[i].r||dis<t[i].l)
return ;
t[i].num+=k;
if(t[i].l==t[i].r)
return ;
push(i);
if(dis<=t[i*2].r)
danxiu(i*2,dis,k);
else if(t[i*2+1].l<=dis)
danxiu(i*2+1,dis,k);
t[i].num=t[i*2].num+t[i*2+1].num;
}
void qucha(int i,int l,int r)
{
if(l<=t[i].l&&t[i].r<=r)
{
s=s+t[i].num;
return ;
}
push(i);
if(l<=t[i*2].r)
qucha(i*2,l,r);
if(t[i*2+1].l<=r)
qucha(i*2+1,l,r);
t[i].num=t[i*2].num+t[i*2+1].num;
}
int main()
{
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>a1[i];
for(int i=1;i<=n;i++)
a[i]=a1[i]-a1[i-1];
build(1,1,n);
add(1);
for(int i=1;i<=m;i++)
{
int o;
cin>>o;
if(o==1)
{
int l,r,k,d;
cin>>l>>r>>k>>d;
quxiu(1,l+1,r,d);
danxiu(1,l,k);
danxiu(1,r+1,-(k+d*(r-l)));
}
else if(o==2)
{
s=0;
int q;
cin>>q;
qucha(1,1,q);
cout<<s<<endl;
}
}
}