社区讨论

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 条回复,欢迎继续交流。

正在加载回复...