社区讨论
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 条回复,欢迎继续交流。
正在加载回复...