样例过了,但是全wa
#include<bits/stdc++.h>
#define maxn 200005
#define ls(x) (x<<1)
#define rs(x) (x<<1|1)
#define mid ((l+r)>>1)
using namespace std;
int n,q,w,W,k;
long long s[maxn<<2],a[maxn],t[maxn<<2],b[62],pw[62];
int flag,fl;
void up(int p){
s[p]=s[ls(p)]+s[rs(p)];
}
void build(int p,int l,int r){
if(l==r) return s[p]=a[l],void();
build(ls(p),l,mid);
build(rs(p),mid+1,r);
up(p);
}
void add(int p,int l,int r,int x){
s[p]+=(r-l+1)*x;
t[p]+=x;
}
void down(int p,int l,int r){
if(!t[p]) return;
add(ls(p),l,mid,t[p]);
add(rs(p),mid+1,r,t[p]);
t[p]=0;
}
void update(int p,int l,int r,int ql,int qr,int x){
if(qr<l||r<ql) return;
if(ql<=l&&r<=qr) return add(p,l,r,x);
down(p,l,r);
update(ls(p),l,mid,ql,qr,x);
update(rs(p),mid+1,r,ql,qr,x);
up(p);
}
int ask(int p,int l,int r,int num){
if(l==r)
{
if(s[p]*pw[k]<num)
return 1;
else if(s[p]*pw[k]==num)
{
// cout<<" "<<p<<" "<<l<<" "<<r<<" "<<num<<endl;
fl=1;
return 1;
}
else
return 0;
}
if(num>s[ls(p)]*pw[k])
return mid-l+1+ask(rs(p),mid+1,r,num-s[ls(p)]*pw[k]);
else if(num==s[ls(p)]*pw[k])
{
// cout<<" "<<p<<" "<<l<<" "<<r<<" "<<num<<endl;
fl=1;
return mid-l+1;
}
else
return ask(ls(p),l,mid,num);
}
int main(){
cin>>n>>q>>W;
for(int i=1;i<=n;i++) cin>>a[i];
b[1]=1;for(int i=2;i<=61;i++)b[i]=2*b[i-1]+1;
pw[0]=1;for(int i=1;i<=61;i++)pw[i]=2*pw[i-1];
build(1,1,n);
while(q--)
{
int l,r,d,ans;
flag=0;
fl=0;
w=W;
cin>>l>>r>>d;
update(1,1,n,l,r,d);
for(int i=28;i>=0;i--)
{
if(b[i]*s[1]<w)
{
k=i;
goto brk;
}
if(b[i]*s[1]==w)
{
k=i; flag=1;
goto brk;
}
}
brk:;
if(flag==0)
{
w-=b[k]*s[1];
ans=ask(1,1,n,w);
}
// cout<<k<<" "<<w<<" "<<fl<<" "<<ans<<endl;
if(flag==1) cout<<k*n-1<<endl;
if(flag==0) cout<<k*n+ans-fl<<endl;
}
return 0;
}