WA on #14 95pts
查看原帖
WA on #14 95pts
488775
Cuiyi_SAI楼主2024/10/20 18:42

rt 不知道哪被卡了

#include <bits/stdc++.h>
#define int long long
using namespace std;
int n,T,L,R,d,W,w,a[200010];
int t1[200010],t2[200010],lg[200010];
void add1(int x,int k){
    for(;x<=n;x+=(x&(-x))) t1[x]+=k;
    return ;
}
void add2(int x,int k){
    for(;x<=n;x+=(x&(-x))) t2[x]+=k;
    return ;
}
int solve(int cnt){
    int res=0,now1=0,now2=0;
    for(long long j=lg[n];j>=0;j--){
        if(((now1+t1[res+(1ull<<j)])*(res+(1ull<<j)+1)-(t2[res+(1ull<<j)]+now2))*(1ull<<cnt)<w){
            res+=(1ull<<j);
            now1+=t1[res];
            now2+=t2[res];
        }
    }
    return res;
}
signed main(){
    // freopen("a.in","r",stdin);
    // freopen("a.out","w",stdout);
    ios::sync_with_stdio(false);
    cin.tie(0);
    cin>>n>>T>>W;
    int sum=0;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        sum+=a[i];
        add1(i,a[i]-a[i-1]);
        add2(i,i*(a[i]-a[i-1]));
    }
    lg[0]=-1;
    for(int i=1;i<=n;i++) lg[i]=lg[i>>1]+1;
    while(T--){
        cin>>L>>R>>d;
        sum+=(R-L+1)*d;
        w=W;
        int cnt=0,del=1;
        while(del*sum<w){
            w-=del*sum;
            cnt++;
            del<<=1ull;
        } 
        add1(L,d),add1(R+1,-d);
        add2(L,(L)*d),add2(R+1,(R+1)*(-d));
        cout<<cnt*n+solve(cnt)<<'\n';
    }
    return 0;
}
2024/10/20 18:42
加载中...