#include<bits/stdc++.h>
typedef long long LL;
using namespace std;
const int maxn=1e5+10;
const LL mod=1e9+7;
const double pi=acos(-1.0);
inline LL read()
{
LL X=0; bool flag=1; char ch=getchar();
while(ch<'0'||ch>'9') {if(ch=='-') flag=0; ch=getchar();}
while(ch>='0'&&ch<='9') {X=(X<<1)+(X<<3)+ch-'0'; ch=getchar();}
if(flag) return X;
return ~(X-1);
}
LL n,m,d;
LL a[maxn];
LL c1[maxn],c2[maxn];
LL b[maxn];
void add(LL x,LL y)
{
LL z=x*y;
while(x<=n){
c1[x]+=y;
c2[x]+=z;
x+=(x&(-x));
}
}
LL query(LL x)
{
LL k=x;
LL k1=0,k2=0;
while(x>0){
k1+=c1[x];
k2+=c2[x];
x-=(x&(-x));
//printf("ko\n");
}
return (k+1)*k1-k2;
}
int main()
{
int T;
scanf("%d",&T);
while(T--){
scanf("%lld%lld%lld",&n,&m,&d);
for(LL i=0;i<=n;i++){
c1[i]=c2[i]=0;
}
a[0]=0;
for(LL i=1;i<=n;i++){
scanf("%lld",&a[i]);b[i]=a[i]-a[i-1];
add(i,b[i]-b[i-1]);
}
LL op,x,y;
while(m--){
scanf("%lld",&op);
if(op==1){
scanf("%lld%lld",&x,&y);
add(x,y);
add(x+1,d-y);
}
else{
scanf("%lld",&x);
// printf("ko\n");
LL sum=query(x);
sum%=mod;
sum=(sum+mod)%mod;
printf("%lld\n",sum);
add(x,-sum);
add(x+1,2*sum);
add(x+2,-sum);
}
//printf("ppppp\n");
}
}
return 0;
}
The Trip On Abandoned Railway(牛客网)
最新推荐文章于 2020-08-07 00:54:50 发布