蒟蒻暴力出奇迹,45pts求问有无优化空间
查看原帖
蒟蒻暴力出奇迹,45pts求问有无优化空间
677664
iaKouhZ楼主2024/10/21 20:57

蒟蒻暴力出奇迹,45pts\text{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;
}
2024/10/21 20:57
加载中...