WA on #20求助
查看原帖
WA on #20求助
1163927
F1NE楼主2024/10/20 18:37

rt

#include<bits/stdc++.h>
#define now sgt[p]
#define _ls p<<1
#define _rs p<<1|1
#define ls sgt[_ls]
#define rs sgt[_rs]
#define root sgt[1]
typedef long long ll;
using namespace std;
const int maxi=2e5+9;
struct node{
	ll sum;
	int s,t,m,laz;
}sgt[maxi<<2];
ll W;
int N,Q,a[maxi],L,R,D,ans,T;
inline void update(int p){now.sum=ls.sum+rs.sum;}
inline void pushdown(int p){
	if(now.laz){
		ls.sum+=1ll*now.laz*(ls.t-ls.s+1);
		ls.laz+=now.laz;
		rs.sum+=1ll*now.laz*(rs.t-rs.s+1);
		rs.laz+=now.laz;
		now.laz=0;
	}
	return;
}
inline void look(int p){
cerr<<"p="<<p
	<<",sum="<<now.sum
	<<",s="<<now.s
	<<",t="<<now.t
	<<",m="<<now.m<<'\n';
}
void check(int p){
	
	if(now.s==now.t){
		look(p);return;
	}
	pushdown(p);update(p);
	check(_ls),check(_rs);
}
void build(int s,int t,int p){
	now.s=s,now.t=t,now.m=(s+t)>>1;
	if(s==t){
		now.sum=1ll*a[s];return;
	}
	build(s,now.m,_ls);
	build(now.m+1,t,_rs);
	update(p);
	return;
}

void wt(int p){
//look(p);
	if(L<=now.s&&now.t<=R){
		now.sum+=1ll*D*(now.t-now.s+1);
		now.laz+=D;
//look(p);
		return;
	}
	pushdown(p);
	if(L<=now.m)wt(_ls);
	if(now.m+1<=R)wt(_rs);
	update(p);
//look(p);
	return;
}

inline void comp(){
	ll tmp=0;
	for(int i=1;i<=N;i++)tmp+=1ll*a[i];
cerr<<"tmp="<<tmp<<",sum="<<root.sum<<'\n';
}
void bound(int p,ll res){
//cerr<<"res="<<res<<'\n';

	if((now.sum<<T)==res||now.s==now.t){
		ans+=now.t-1;return;
	}
//look(_ls);
	pushdown(p);
	if((ls.sum)>=(res>>T))bound(_ls,res);
	else bound(_rs,res-(ls.sum<<T));
	update(p);
	return;
}
int main(){
//freopen("wxyt2.in","r",stdin);
//freopen("out.out","w",stdout);
	cin>>N>>Q>>W;
	for(int i=1;i<=N;i++)scanf("%d",&a[i]);
	build(1,N,1);
//comp();
//check(1);
	for(int i=1;i<=Q;i++){
		scanf("%d%d%d",&L,&R,&D);
		wt(1);
//comp();
//look(1); 
//check(1);
		ans=0,T=0;ll tmp=W;
		for(;;){
			if((root.sum<<T)>=(tmp))break;
			tmp-=root.sum<<T;
			T++,ans+=N;
		}
//cerr<<"T="<<T
//	<<",ans="<<ans<<'\n';
		bound(1,tmp);
		printf("%d\n",ans);
	}
	return 0;
}
2024/10/20 18:37
加载中...