全WA求调,悬赏1关

P4145 上帝造题的七分钟 2 / 花神游历各国

@[QinYulang](/user/1201743) 你的 `size` 意义何在
by lunjiahao @ 2024-08-14 21:11:42


@[lunjiahao](/user/779970) 没意义
by QinYulang @ 2024-08-14 21:14:24


@[QinYulang](/user/1201743) 因为每次都进行区间开方操作,可以记录一下区间最大值,若是最大值已经是 $1$ 了就可以不用往下递归了 例: ```cpp void update(int u,int l,int r,int x,int y) { if(y<l||r<x) return; if(l==r) { t[u]=maxl[u]=sqrt(t[u]); return; } int mid=(l+r)>>1; if(x<=mid&&maxl[ls]>1) update(ls,l,mid,x,y); if(y>mid&&maxl[rs]>1) update(rs,mid+1,r,x,y); push_up(u); } ```
by lunjiahao @ 2024-08-14 21:17:01


@[lunjiahao](/user/779970) 懂了谢谢谢谢
by QinYulang @ 2024-08-14 21:18:44


@[lunjiahao](/user/779970) 这就去改
by QinYulang @ 2024-08-14 21:19:14


@[lunjiahao](/user/779970) 样例测了,最后一个不对,应是6,我输出了5
by QinYulang @ 2024-08-14 21:23:25


@[lunjiahao](/user/779970) 为什么呢
by QinYulang @ 2024-08-14 21:27:48


@[QinYulang](/user/1201743) 奇怪了为啥你的程序会算少
by lunjiahao @ 2024-08-14 21:36:08


@[QinYulang](/user/1201743) 破案了 `modify` 函数中 ```cpp if(l <= mid) modify(k << 1, l, mid); if(mid < r) modify(k << 1 | 1, mid + 1, r); ``` 应该为 ```cpp if(l <= mid && tree[k << 1].max > 1) modify(k << 1, l, r); if(mid < r && tree[k << 1 | 1].max > 1) modify(k << 1 | 1, l, r); ``` 还有 `if(tree[k].val == tree[k].size) return ;` 删去,且记得开 `long long` !!! ~~完了眼睛真的不好看了几次都没看到~~
by lunjiahao @ 2024-08-14 21:54:41


@[lunjiahao](/user/779970) 过了过了谢谢
by QinYulang @ 2024-08-15 09:29:24


| 下一页