60pts 再次求调

P1253 扶苏的问题

_Coffice_ @ 2023-05-24 18:01:26

#include<iostream>
using namespace std;
struct node
{
    long long v;
    long long l,r;
    long long tag_add,tag_upd;
    bool ta,tu;
};
node t[5000005];
long long a[1000005];
inline void f_upd(long long p,long long x)
{
    t[p].tag_upd = x;
    t[p].v = x;
    t[p].tu = 1;
    t[p].ta = 0;
    t[p].tag_add = 0;
    return ;
}
inline void down_upd(long long p)
{
    if(t[p].tu != 0)
    {
        f_upd(p*2,t[p].tag_upd);
        f_upd(p*2+1,t[p].tag_upd);
        t[p].tag_upd = 0;
        t[p].tu = 0;
        return ;
    }
}
inline void f_add(long long p,long long x)
{
    down_upd(p);
    t[p].tag_add += x;
    t[p].v += x;
    t[p].ta = 1;
    return ;
}
inline void down_add(long long p)
{
    down_upd(p);
    if(t[p].ta != 0)
    {
        f_add(p*2,t[p].tag_add);
        f_add(p*2+1,t[p].tag_add);
        t[p].tag_add = 0;
        t[p].ta = 0;
        return ;
    }
}
void js(long long p,long long l,long long r)
{
    t[p].l = l;
    t[p].r = r;
    t[p].tag_add = t[p].tag_upd = 0;
    t[p].ta = t[p].tu = 0;
    if(l == r)
    {
        t[p].v = a[l];
        return ;
    }
    long long mid = (l+r)/2;
    js(p*2,l,mid);
    js(p*2+1,mid+1,r);
    t[p].v = max(t[p*2].v,t[p*2+1].v);
    return ;
}
long long max_(long long p,long long l,long long r)
{
    if(l <= t[p].l && r >= t[p].r)
    {
        return t[p].v;
    }
    long long mid = (t[p].l+t[p].r)/2;
    long long ans = -100000000007;
    down_upd(p);
    down_add(p);
    if(l <= mid)
    {
        ans = max_(p*2,l,r);
    }
    if(r >= mid+1)
    {
        ans = max(ans,max_(p*2+1,l,r));
    }
    if(ans == -100000000007)
    {
        return -1;
    }
    else
        return ans;
}
void upd(long long p,long long l,long long r,long long x)
{
    if(t[p].l >= l && t[p].r <= r)
    {
        t[p].tu = 1;
        t[p].tag_upd = x;
        t[p].ta = 0;
        t[p].tag_add = 0;
        t[p].v = x;
        return ;
    }
    long long mid = (t[p].l+t[p].r)/2;
    if(l <= mid)
    {
        upd(p*2,l,r,x);
    }
    if(r >= mid+1)
    {
        upd(p*2+1,l,r,x);
    }
    down_upd(p);
    down_add(p);
    t[p].v = max(t[p*2].v,t[p*2+1].v);
    return ;
}
void add(long long p,long long l,long long r,long long x)
{
    if(t[p].l >= l && t[p].r <= r)
    {
        down_upd(p);
        t[p].ta = 1;
        t[p].tag_add += x;
        t[p].v += x;
        return ;
    }
    long long mid = (t[p].l+t[p].r)/2;
    if(l<=mid)
    {
        add(p*2,l,r,x);
    }
    if(r >= mid+1)
    {
        add(p*2+1,l,r,x);
    }
    down_upd(p);
    down_add(p);
    t[p].v = max(t[p*2].v,t[p*2+1].v);
}
int main()
{
    ios::sync_with_stdio(false); cin.tie(0), cout.tie(0);
    long long n,q;
    cin >> n >> q;
    for(long long i=1;i<=n;i++)
    {
        cin >> a[i];
    }
    js(1,1,n);
    for(long long i=1;i<=q;i++)
    {
        long long op;
        cin >> op;
        if(op == 1)
        {
            long long l,r,x;
            cin >> l >> r >> x;
            upd(1,l,r,x);
        }
        else if(op == 2)
        {
            long long l,r,x;
            cin >> l >> r >> x;
            add(1,l,r,x);
        }
        else
        {
            long long l,r;
            cin >> l >> r;
            cout << max_(1,l,r) << endl;
        }
    }
    return 0;
}

7,8,9,10 WA

改了好久,还是不对,求教

@-扶苏-


by _Coffice_ @ 2023-05-24 18:01:56

@一扶苏一


by Sheez @ 2023-05-24 18:15:33

这就是付费用户


by _Coffice_ @ 2023-05-24 18:19:06


by _Coffice_ @ 2023-05-24 18:19:44

调题 or hack?


|