关于梦熊CSP-S(玄关)
  • 板块灌水区
  • 楼主hcy1117
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/10/20 18:36
  • 上次更新2024/10/20 20:05:28
查看原帖
关于梦熊CSP-S(玄关)
694969
hcy1117楼主2024/10/20 18:36

求问以下代码为什么只有十分

#include<bits/stdc++.h>
#define int long long
#define rint register int
using namespace std;
int n,k;
int a[200005];
int q,W; 
int d[1600005],lz[1600005];
inline void pd(rint l,rint r,rint p){
	if(!lz[p])return ;
	rint mid=(l+r)>>1;
	d[p<<1]+=lz[p]*(mid-l+1),d[(p<<1)+1]+=lz[p]*(r-mid);
	lz[p<<1]+=lz[p],lz[(p<<1)+1]+=lz[p];
	lz[p]=0;
}
inline void build(rint l,rint r,rint p){
	if(l==r){d[p]=a[l];return ;}
	rint mid=(l+r)>>1;
	build(l,mid,p<<1),build(mid+1,r,(p<<1)+1);
	d[p]=d[p<<1]+d[(p<<1)+1];
}
inline void update(rint l,rint r,rint s,rint t,rint p){
	if(l<=s&&t<=r){
		d[p]+=k*(t-s+1),lz[p]+=k;return ;
	}
	pd(s,t,p);
	rint mid=(s+t)>>1;
	if(l<=mid)update(l,r,s,mid,p<<1);
	if(mid+1<=r)update(l,r,mid+1,t,(p<<1)+1);
	d[p]=d[p<<1]+d[(p<<1)+1];
}
inline int get(rint l,rint r,rint s,rint t,rint p){
	if(l<=s&&t<=r){
		return d[p];
	}
	pd(s,t,p);
	rint mid=(s+t)>>1,sum=0;
	if(l<=mid)sum+=get(l,r,s,mid,p<<1);
	if(mid+1<=r)sum+=get(l,r,mid+1,t,(p<<1)+1);
	return sum; 
}
inline int read(){
	int x=0,f=1;
	char ch;ch=getchar();
	while(ch<'0'||ch>'9'){
		if(ch=='-')f=-1;ch=getchar();
	}
	while(ch>='0'&&ch<='9')x=(x<<1)+(x<<3)+ch-48,ch=getchar();
	return x*f;
}
void write(rint x){
	if(x<0)putchar('-'),x=-x;
	if(x>9)write(x/10);
	putchar(x%10+48);
}
int pw[65]={1};
signed main(){
//	freopen("wxyt.in","r",stdin);
//	freopen("wxyt.out","w",stdout);
	n=read(),q=read(),W=read();
	for(int i=1;i<=63;i++)pw[i]=pw[i-1]*2;
	for(rint i=1;i<=n;i++)a[i]=read();
	build(1,n,1);
	while(q--){
		int L=read(),R=read();
		k=read();
		int w=W;
		update(L,R,1,n,1);
		int sum=d[1];
		rint l=1,r=63;
		int ans=0,num=0;
		while(l<=r){
			rint mid=(l+r)>>1;
			if(1ull*sum*(pw[mid]-1)<w)ans=mid,l=mid+1;
			else r=mid-1;
		}
		w-=(pw[ans]-1)*sum;
		l=1,r=n-1;
		while(l<=r){
			rint mid=(l+r)>>1;
			if(1ull*get(1,mid,1,n,1)*pw[ans]<w)num=mid,l=mid+1;
			else r=mid-1;
		}
		ans*=n,ans+=num;
		write(ans),puts("");
	}
	return 0;
}











2024/10/20 18:36
加载中...