求问以下代码为什么只有十分
#include<bits/stdc++.h>
#define int long long
#define rint register int
using namespace std;
int n,k;
int a[200005];
int q,W;
int d[1600005],lz[1600005];
inline void pd(rint l,rint r,rint p){
if(!lz[p])return ;
rint mid=(l+r)>>1;
d[p<<1]+=lz[p]*(mid-l+1),d[(p<<1)+1]+=lz[p]*(r-mid);
lz[p<<1]+=lz[p],lz[(p<<1)+1]+=lz[p];
lz[p]=0;
}
inline void build(rint l,rint r,rint p){
if(l==r){d[p]=a[l];return ;}
rint mid=(l+r)>>1;
build(l,mid,p<<1),build(mid+1,r,(p<<1)+1);
d[p]=d[p<<1]+d[(p<<1)+1];
}
inline void update(rint l,rint r,rint s,rint t,rint p){
if(l<=s&&t<=r){
d[p]+=k*(t-s+1),lz[p]+=k;return ;
}
pd(s,t,p);
rint mid=(s+t)>>1;
if(l<=mid)update(l,r,s,mid,p<<1);
if(mid+1<=r)update(l,r,mid+1,t,(p<<1)+1);
d[p]=d[p<<1]+d[(p<<1)+1];
}
inline int get(rint l,rint r,rint s,rint t,rint p){
if(l<=s&&t<=r){
return d[p];
}
pd(s,t,p);
rint mid=(s+t)>>1,sum=0;
if(l<=mid)sum+=get(l,r,s,mid,p<<1);
if(mid+1<=r)sum+=get(l,r,mid+1,t,(p<<1)+1);
return sum;
}
inline int read(){
int x=0,f=1;
char ch;ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')f=-1;ch=getchar();
}
while(ch>='0'&&ch<='9')x=(x<<1)+(x<<3)+ch-48,ch=getchar();
return x*f;
}
void write(rint x){
if(x<0)putchar('-'),x=-x;
if(x>9)write(x/10);
putchar(x%10+48);
}
int pw[65]={1};
signed main(){
// freopen("wxyt.in","r",stdin);
// freopen("wxyt.out","w",stdout);
n=read(),q=read(),W=read();
for(int i=1;i<=63;i++)pw[i]=pw[i-1]*2;
for(rint i=1;i<=n;i++)a[i]=read();
build(1,n,1);
while(q--){
int L=read(),R=read();
k=read();
int w=W;
update(L,R,1,n,1);
int sum=d[1];
rint l=1,r=63;
int ans=0,num=0;
while(l<=r){
rint mid=(l+r)>>1;
if(1ull*sum*(pw[mid]-1)<w)ans=mid,l=mid+1;
else r=mid-1;
}
w-=(pw[ans]-1)*sum;
l=1,r=n-1;
while(l<=r){
rint mid=(l+r)>>1;
if(1ull*get(1,mid,1,n,1)*pw[ans]<w)num=mid,l=mid+1;
else r=mid-1;
}
ans*=n,ans+=num;
write(ans),puts("");
}
return 0;
}