如题,本蒟蒻没学过线段树,大佬们能不能看看这份代码能不能再优化
#include <bits/stdc++.h>
using namespace std;
long long n,q,w,cf[200000+10],qzh[200000+10],qz[200000+10],ys[200000+10],ans[1000000+10];
int main(){
cin>>n>>q>>w;
for(int i=1;i<=n;i++)
{
cin>>ys[i];
cf[i]=ys[i]-ys[i-1];
qzh[i]=qzh[i-1]+ys[i];
}
for(int i=1;i<=q;i++)
{
int l,r,d;
cin>>l>>r>>d;
cf[l]+=d;
cf[r+1]-=d;
long long h=0,he=w;
h+=cf[1];
qz[1]=h;
for(int i=2;i<=n;i++)
{
h+=cf[i];
qz[i]=qz[i-1]+h;
}
while(he>0)
{
if(he>qz[n])
{
he-=qz[n];
for(int j=1;j<=n;j++)
{
qz[j]*=2;
}
ans[i]+=n;
continue;
}
else
{
int l=1,r=n;
while(l<r)
{
long long mid=(l+r)>>1;
if(qz[mid]>=he)
{
r=mid;
}
else{
l=mid+1;
}
}
ans[i]+=r-1;
break;
}
}
}
for(int i=1;i<=q;i++)
{
cout<<ans[i]<<endl;
}
return 0;
}