社区讨论

0pts 求调

P11217【MX-S4-T1】「yyOI R2」youyou 的垃圾桶参与者 2已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@mhizndew
此快照首次捕获于
2025/11/03 18:19
4 个月前
此快照最后确认于
2025/11/03 18:19
4 个月前
查看原帖
rt,过样例,已经 Ctrl+F 将所有 int 改为 long long,WA*12 TLE*8。
调试时需要错误数据的可以私信或者 QQ 联系我,万分感谢。
CPP
#include<bits/stdc++.h>
using namespace std;
const long long maxn=2e5+10;
long long n,a[maxn],q,w,tr[maxn<<2],tag[maxn<<2];
void push_up(long long x){
	tr[x]=tr[x<<1]+tr[x<<1|1];
}
void push_down(long long l,long long r,long long num){
	if(tag[num]){
		long long mid=l+r>>1;
		tr[num<<1]+=(mid-l+1)*tag[num];
		tr[num<<1|1]+=(r-mid)*tag[num];
		tag[num<<1]+=tag[num];
		tag[num<<1|1]+=tag[num];
		tag[num]=0;
	}
}
void build(long long l,long long r,long long num){
	if(l==r){
		tr[num]=a[l];
		return;
	}
	long long mid=l+r>>1;
	build(l,mid,num<<1);
	build(mid+1,r,num<<1|1);
	push_up(num);
}
void add(long long l,long long r,long long s,long long t,long long num,long long val){
	if(s>=l && t<=r){
		tr[num]+=(t-s+1)*val;
		tag[num]+=val;
		return;
	}
	push_down(s,t,num);
	long long mid=s+t>>1;
	if(l<=mid) add(l,r,s,mid,num<<1,val);
	if(r>mid) add(l,r,mid+1,t,num<<1|1,val);
	push_up(num);
}
long long query(long long l,long long r,long long num,long long val,long long k){
	if(l==r) return l;
	push_down(l,r,num);
	long long mid=l+r>>1;
	if(tr[num<<1]*k>=val) return query(l,mid,num<<1,val,k);
	else return query(mid+1,r,num<<1|1,val-tr[num<<1]*k,k);
}
int main(){
	ios::sync_with_stdio(false);
	cin>>n>>q>>w;
	for(long long i=1;i<=n;i++) cin>>a[i];
	build(1,n,1);
	while(q--){
		long long f,g,d;
		cin>>f>>g>>d;
		add(f,g,1,n,1,d);
		long long x=tr[1];
		long long k=0,t=1;
		while((k*2+1)*x<w) k=k*2+1,t<<=1;
		//cout<<k<<"\n";
		long long q=w-k*x;
		//k=k*2+1;
		long long ans=query(1,n,1,q,t);
		//cout<<q<<"\n";
		cout<<k*n+ans-1<<"\n";
	}
	return 0;
}

回复

3 条回复,欢迎继续交流。

正在加载回复...