蒟蒻暴力出奇迹,45pts 求问有无优化空间
#include<bits/stdc++.h>
using namespace std;
int n,q,bs=0;
long long W,Wl,a[200001],at=0,b[64]={0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535,131071,262143,524287,1048575,2097151,4194303,8388607,16777215,33554431,67108863,134217727,268435455,536870911,1073741823,2147483647,4294967295,8589934591,17179869183,34359738367,68719476735,137438953471,274877906943,549755813887,1099511627775,2199023255551,4398046511103,8796093022207,17592186044415,35184372088831,70368744177663,140737488355327,281474976710655,562949953421311,1125899906842623,2251799813685247,4503599627370495,9007199254740991,18014398509481983,36028797018963967,72057594037927935,144115188075855871,288230376151711743,576460752303423487,1152921504606846975,2305843009213693951,4611686018427387903,9223372036854775807};
int l,r,d,f,uckccf;
bool ot=0;
int main(){
cin>>n>>q>>W;
for(int i=1;i<=n;i++){
scanf("%lld",&a[i]);
at+=a[i];
}
for(int j=1;j<=q;j++){
Wl=0,bs=0,ot=0;
int ans=0;
scanf("%d %d %d",&l,&r,&d);
at+=(r-l+1)*d;
for(int i=l;i<=r;i++){
a[i]+=d;
}
for(int i=0;i<63;i++){
Wl=at*b[i];
if(Wl>=W || Wl<0){
ans+=(i-1)*n;
f=i-1;
Wl=at*b[f];
break;
}
}
for(int i=f;i<f+1;i++){
for(int k=1;k<=n;k++){
Wl+=((b[i]+1)*a[k]);
ans++;
if(Wl>=W || Wl<0){
break;
}
}
}
printf("%d\n",ans-1);
}
return 0;
}