线段树加二分70pts TLE 求调
查看原帖
线段树加二分70pts TLE 求调
580544
ananyzx楼主2024/10/20 21:51
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
long long n,q,W;
long long a[N<<2],tap[N<<2],ans[N<<2],lg[N],sum,aans;
inline long long ls(long long x){
	return x<<1;
}

inline long long rs(long long x) {
	return x<<1|1;
}

inline void push_up(long long p){
	ans[p]=ans[ls(p)]+ans[rs(p)];
}

void build(long long p,long long l,long long r){
	tap[p]=0;
	if(l==r){ans[p]=a[l];return;}
	long long mid=(l+r)>>1;
	build(ls(p),l,mid);
	build(rs(p),mid+1,r);
	push_up(p);
}

inline void f(long long p,long long l,long long r,long long k){
	ans[p]=ans[p]+(r-l+1)*k;
	tap[p]=tap[p]+k;
}

inline void push_down(long long p,long long l,long long r){
	long long mid=(l+r)>>1;
	f(ls(p),l,mid,tap[p]);
	f(rs(p),mid+1,r,tap[p]);
	tap[p]=0;
}

inline void update(long long nl,long long nr,long long l,long long r,long long p,long long k){
	if(nl<=l&&nr>=r){
		ans[p]=ans[p]+k*(r-l+1);
		tap[p]=tap[p]+k;
		return ;
	}
	push_down(p,l,r);
	long long mid=(l+r)>>1;
	if(nl<=mid) update(nl,nr,l,mid,ls(p),k);
	if(nr>mid) update(nl,nr,mid+1,r,rs(p),k);
	push_up(p);
}

inline long long query(long long x,long long y,long long l,long long r,long long p){
	long long res=0;
	if(x<=l&&y>=r)return ans[p];
	long long mid=(l+r)>>1;
	push_down(p,l,r);
	if(x<=mid) res+=query(x,y,l,mid,ls(p));
	if(y>mid)  res+=query(x,y,mid+1,r,rs(p));
	return res;
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cin>>n>>q>>W;
	for(long long i=1;i<=n;i++) cin>>a[i];
	build(1,1,n);
	lg[0]=1;
	for(int i=1;i<=65;i++){
		lg[i]=lg[i-1]*2;
		if(lg[i]>W) break;
	}
	int l,r,mid;
	long long w,cnt;
	long long x,y,z;
	for(long long i=1;i<=q;i++){
		aans=0;
		cin>>x>>y>>z;
		update(x,y,1,n,1,z);
		sum=query(1,n,1,n,1);
		w=W;
		cnt=1;
		while(w>sum*lg[cnt-1]){
			w-=sum*lg[cnt-1];
			cnt++;
		}
		aans=(cnt-1)*n;
		l=1,r=n,mid;
		while(l<=r){
			mid=(l+r)>>1;
			if(query(1,mid,1,n,1)*lg[cnt-1]>=w) r=mid-1;
			else l=mid+1;
		}
		aans=aans+l-1;
		cout<<aans<<"\n";
	}
	return 0;
} 
2024/10/20 21:51
加载中...