_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?