考场为了获得部分分的代码,但是为什么WA了?按思路来说除了TLE的点都能AC
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define nhd1 cerr<<"nahida_is_lovely1"<<endl;
#define nhd2 cerr<<"nahida_is_lovely2"<<endl;
#define D(x) cerr<<#x<<'='<<x<<endl;
#define pb push_back
#define lb long double
#define mp make_pair
#define R(i,a) for(int i=1;i<=a;i++)
const int N=2e5+5;
int n,q,len;
template <typename T>
inline void read(T &x)
{
T s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
x=s*w;
}
template <typename T>
inline void write(T x)
{
if(x<0) {
putchar('-');
x = -x;
}
if(x>9) write(x / 10);
putchar(x % 10 + '0');
}
ll W;
ll a[N],block[N],tag[N],id[N];
void build()
{
len=sqrt(n);
for(int i=1;i<=n;i++)
{
id[i]=(i-1)/len+1;
block[id[i]]+=a[i];
}
}
void pushdown(int k)
{
if(tag[k])
{
for(int i=(k-1)*len+1;i<=k*len;i++)
{
a[i]+=tag[k];
}
tag[k]=0;
}
}
void update(int l,int r,ll w)//区间加
{
int p1=id[l],p2=id[r];
if(p1==p2)
{
for(int i=l;i<=r;i++)
{
a[i]+=w;
block[p1]+=w;
}
return ;
}
for(int i=l;i<=p1*len;i++)
{
a[i]+=w;
block[p1]+=w;
}
for(int i=(p2-1)*len+1;i<=min(r,n);i++)
{
a[i]+=w;
block[p2]+=w;
}
for(int i=p1+1;i<=p2-1;i++)
{
block[i]+=1LL*len*w;
tag[i]+=w;
}
}
ll ans=0;
inline void query(int l,int r,ll k)//查询区间和,得改。
{
int p1=id[l],p2=id[r];
pushdown(p1);pushdown(p2);
if(p1==p2)
{
for(int i=l;i<=r;i++)
{
W-=(a[i]*k);
if(W<=0)
{
return ;
}
ans++;
// D(ans);D(W);
}
query(l,r,k*2);
}
for(int i=l;i<=p1*len;i++)
{
W-=a[i]*k;
if(W<=0)
{
return ;
}
ans++;
// D(ans);D(W);
}
for(int i=p1+1;i<=p2-1;i++)
{
W-=block[i]*k;
if(W<=0)
{
W+=block[i]*k;
pushdown(i);
for(int j=(i)*len;j<=(i+1)*len-1;j++)
{
W-=(a[j]*k);
if(W<=0)
{
return ;
}
ans++;
// D(ans);D(W);
}
}
ans+=len;
// D(ans);D(W);
}
for(int i=(p2-1)*len+1;i<=min(r,n);i++)//调一个顺序
{
W-=a[i]*k;
if(W<=0)
{
return ;
}
ans++;
// D(ans);D(W);
}
query(l,r,k*2);
}
int main()
{
// freopen("wxyt2.in","r",stdin);
// freopen("wxyt2.out","w",stdout);
read(n);read(q);read(W);
ll nahida=W;
for(int i=1;i<=n;i++) read(a[i]);
build();
while(q--)
{
int l,r;
read(l);read(r);
int k;
read(k);
update(l,r,k);
W=nahida;
query(1,n,1);
write(ans);
putchar('\n');
ans=0;
}
return 0;
}