求调喵
查看原帖
求调喵
793805
aizhoukai楼主2024/10/22 20:19
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
long long n,q,w,a[214514],lll,rrr,d,aa[214514];
struct node
{
	ll l,r,v,tag1,tag2;
}tri[1000040];
void build(int p,int l,int r)
{
tri[p].l=l;tri[p].r=r;tri[p].tag1=0;tri[p].tag2=0;
if(l==r)
{
	tri[p].v=a[l]; return;
}
ll mid=(l+r)/2;
build(p*2,l,mid); build(p*2+1,mid+1,r);
tri[p].v=tri[p*2].v+tri[p*2+1].v;
}
void f(int p,int k)
{
	tri[p].tag1+=k;
	tri[p].v+=(tri[p].r-tri[p].l+1)*k;
}
void f2(int p,int k)
{
	tri[p].tag2=1;
	tri[p].v+=(tri[p].r-tri[p].l+1)*k;
}
void pushdown(int p)
{
	f(p*2,tri[p].tag1);
	f(p*2+1,tri[p].tag1);
	tri[p].tag1=0;
//	f2(p*2,tri[p].tag2);
//	f2(p*2+1,tri[p].tag2);
//	tri[p].tag2=1;
}
void update(int p,int l,int r,long long k)
{
	if(tri[p].l>=l&&tri[p].r<=r)
	{
		f(p,k); return;
	}
//	if(tri[p].l>=l&&tri[p].r<=r&&bb==1)
//	{
//		f2(p,k); return;
//	}
	pushdown(p);
	ll mid=(tri[p].l+tri[p].r)/2;
	if(l<=mid) update(p*2,l,r,k);
	if(r>mid) update(p*2+1,l,r,k);
	tri[p].v=tri[p*2].v+tri[p*2+1].v;
}
ll query(int p,int l,int r)
{
	if(tri[p].l>=l&&tri[p].r<=r) return tri[p].v;
	pushdown(p);
	ll mid=(tri[p].l+tri[p].r)/2,ret=0;
	if(l<=mid)	ret+=query(p*2,l,r);
	if(r>mid) ret+=query(p*2+1,l,r);
	return ret;
}
bool check(long long t)
{
	int temp=1;
	__int128 ww=w;
	ww-=(query(1,1,t%n)<<(t/n+1))-query(1,1,t%n);
	if(ww<=0)
	return 0;
	if(t/n>0)
	ww-=(query(1,t%n+1,n)<<(t/n))-query(1,t%n+1,n);
	if(ww<=0)
	return 0;
	return 1;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n>>q>>w;
for(int i=1;i<=n;i++)
scanf("%lld",&a[i]);
build(1,1,n);
while(q--)
{
	scanf("%lld%lld%lld",&lll,&rrr,&d);
	update(1,int(lll),int(rrr),d);
	long long ll=0,rr=60*n,mid;
	while(ll<rr)
	{
		mid=(ll+rr)/2;
		if(check(mid))
		ll=mid+1;
		else
		rr=mid;
	}
	printf("%lld\n",ll-1);
}
return 0;
}

0pts,#1~#8WA,其余TLE

2024/10/22 20:19
加载中...