刚学OI $10^{-998244353}$ms,线段树WA求助

SP1043 GSS1 - Can you answer these queries I

哦,那个`modify`是看错题,以为要在线之后写的。 后来发现不用在线之后就注释掉了,应该没问题吧QwQ
by 云浅知处 @ 2020-07-09 18:09:35


[$\color{red}\text{借楼宣传一下}$](https://www.luogu.com.cn/discuss/show/236411)
by 翼德天尊 @ 2020-07-09 18:16:42


互相借楼还行/fad
by _5011_ @ 2020-07-09 18:43:22


@[云浅知处](/user/307453) 您的代码在合并空节点的时候sum会错吧
by _5011_ @ 2020-07-09 18:50:47


```cpp Node tmp=Node(-2333333333,-2333333333,-2333333333,-2333333333),t1=Node(-2333333333,-2333333333,-2333333333,-2333333333),t2=Node(-2333333333,-2333333333,-2333333333,-2333333333); ``` $\downarrow$ ```cpp Node tmp=Node(-2333333333,-2333333333,-2333333333,0),t1=Node(-2333333333,-2333333333,-2333333333,0),t2=Node(-2333333333,-2333333333,-2333333333,0); ```
by _5011_ @ 2020-07-09 18:51:25


@[Zephyr_](/user/91127) 这个我也想到了,但是修改之后貌似[没毛用](https://www.luogu.com.cn/record/34984939)( 修改后的代码:(只放查询那部分) ```cpp inline Node query(LL l,LL r,LL ql,LL qr,LL o){ if(l<=ql&&qr<=r){ return d[o]; } LL mid=(ql+qr)>>1; Node tmp=Node(-2333333333,-2333333333,-2333333333,-2333333333),t1=Node(-2333333333,-2333333333,-2333333333,-2333333333),t2=Node(-2333333333,-2333333333,-2333333333,-2333333333); bool f1=0,f2=0; if(l<=mid){ t1=query(l,r,ql,mid,lson(o)); f1=1; } if(r>mid){ t2=query(l,r,mid+1,qr,rson(o)); f2=1; } tmp.p=max(max(t1.p,t2.p),t1.r+t2.q); tmp.q=max(t1.q,t1.sum+t2.q); tmp.r=max(t2.r,t2.sum+t1.r); if(f1&&f2)tmp.sum=t1.sum+t2.sum; else if(f1&&(!f2))tmp.sum=t1.sum; else if(f2&&(!f1))tmp.sum=t2.sum; else tmp.sum=0; return tmp; } ```
by 云浅知处 @ 2020-07-09 18:54:30


@[Zephyr_](/user/91127) 照您这么改[也WA掉了](https://www.luogu.com.cn/record/34985013)....../kk/kk
by 云浅知处 @ 2020-07-09 18:56:59


不要用这么鬼畜的写法。 把它和pushup合在一起
by 辰星凌 @ 2020-07-09 19:08:16


还有,不要瞎jb定义极小值然后合并,像这样写就可以过了: ```cpp inline Node query(LL l,LL r,LL ql,LL qr,LL o){ if(l<=ql&&qr<=r){ return d[o]; } LL mid=(ql+qr)>>1; if(r<=mid)return query(l,r,ql,mid,lson(o)); if(l>mid)return query(l,r,mid+1,qr,rson(o)); Node tmp,t1=query(l,r,ql,mid,lson(o)),t2=query(l,r,mid+1,qr,rson(o)); tmp.p=max(max(t1.p,t2.p),t1.r+t2.q); tmp.q=max(t1.q,t1.sum+t2.q); tmp.r=max(t2.r,t2.sum+t1.r); tmp.sum=t1.sum+t2.sum; return tmp; } ```
by 辰星凌 @ 2020-07-09 19:11:54


@[云浅知处](/user/307453)
by 辰星凌 @ 2020-07-09 19:12:06


| 下一页