社区讨论
95pts WA on test 20 求助
P11217【MX-S4-T1】「yyOI R2」youyou 的垃圾桶参与者 8已保存回复 13
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 13 条
- 当前快照
- 1 份
- 快照标识符
- @m2hhkv5e
- 此快照首次捕获于
- 2024/10/20 19:10 去年
- 此快照最后确认于
- 2025/11/04 23:50 4 个月前
赛时本来以为已经杀了结果被反咬5pts。
“wrong answer On line 965685 column 6, read 2, expected 1.”
不知道什么corner case。
CPP#include <bits/stdc++.h>
#define ED cerr<<endl;
#define TS cerr<<"I AK IOI"<<endl;
#define cr(x) cerr<<x<<endl;
#define cr2(x,y) cerr<<x<<" "<<y<<endl;
#define cr3(x,y,z) cerr<<x<<" "<<y<<" "<<z<<endl;
#define cr4(x,y,z,w) cerr<<x<<" "<<y<<" "<<z<<" "<<w<<endl;
#define pii pair<int,ll>
#define epb emplace_back
#define pb push_back
#define mk make_pair
#define fi first
#define se second
#define ll long long
using namespace std;
const int N=2e5+5,INF=2e9,mod=998244353;
int n,q;ll w;
int a[N];
void read(int &x) {
int f=1;char s=getchar();x=0;
while(s<'0'||s>'9') {
if(s=='-') f=-1;
s=getchar();
}
while(s>='0'&&s<='9') {
x=(x<<1)+(x<<3)+(s^48);
s=getchar();
}
x*=f;
}
struct tree {
int l,r;ll sum,tag=0;
}tr[N<<2];
void pushup(int u) {
tr[u].sum=tr[u<<1].sum+tr[u<<1|1].sum;
}
void add(int u,int x) {
tr[u].sum+=1ll*(tr[u].r-tr[u].l+1)*x;
tr[u].tag+=x;
}
void pushdown(int u) {
if(!tr[u].tag) return;
add(u<<1,tr[u].tag),add(u<<1|1,tr[u].tag);
tr[u].tag=0;
}
void build(int u,int l,int r) {
tr[u].l=l,tr[u].r=r;
if(l==r) {
tr[u].sum=a[l];
return;
}
int mid=l+r>>1;
build(u<<1,l,mid),build(u<<1|1,mid+1,r);
pushup(u);
}
void update(int u,int l,int r,int x) {
if(l<=tr[u].l&&tr[u].r<=r) {
return add(u,x);
}
pushdown(u);
int mid=tr[u].l+tr[u].r>>1;
if(l<=mid) update(u<<1,l,r,x);
if(r>mid) update(u<<1|1,l,r,x);
pushup(u);
}
int query(int u,ll val,ll mul) {
if(tr[u].l==tr[u].r) return tr[u].l-1;
pushdown(u);
if(tr[u<<1].sum*mul>val) return query(u<<1,val,mul);
else return query(u<<1|1,val-tr[u<<1].sum*mul,mul);
}
ll Query() {
int turn=0;ll now=w,mul=1;
while(1) {
if(1ll*tr[1].sum*mul<now) now-=1ll*tr[1].sum*mul;
else break;
++turn,mul<<=1;
}
return 1ll*turn*n+query(1,now,mul);
}
int main()
{
//freopen("wxyt4.in","r",stdin);
//freopen("qwq.out","w",stdout);
scanf("%d%d%lld",&n,&q,&w);
for(int i=1;i<=n;++i) {
read(a[i]);
}
build(1,1,n);
int l,r,x;
while(q--) {
read(l),read(r),read(x);
update(1,l,r,x);
printf("%lld\n",Query());
}
return 0;
}
/*
*/
回复
共 13 条回复,欢迎继续交流。
正在加载回复...