区间更新:每个数开方
区间查询:区间和
操作次数太大,时间优化方法是,标记区间是否全为1,若是则停止更新操作
RE了好多次,坑爹的有 x > y 的数据
#include <stdio.h>
#include <math.h>
#include <algorithm>
#define L(i) (i) << 1
#define R(i) (i) << 1 | 1
#define N 100005
struct s_t
{
int l,r,isone;
__int64 sum;
int mid()
{
return (l + r) >> 1;
}
__int64 len()
{
return r - l + 1LL;
}
}st[N<<2];
__int64 a[N];
void build(int id,int l,int r)
{
st[id].l = l;
st[id].r = r;
if(l == r)
st[id].sum = a[l];
else
{
int mid = st[id].mid();
build(L(id),l,mid);
build(R(id),mid + 1,r);
st[id].sum = st[L(id)].sum + st[R
这篇博客探讨了如何使用线段树解决区间更新和查询的问题,特别是面对每个数需要开方的复杂性。文章指出,在操作次数过多的情况下,可以通过标记区间是否全为1来优化时间复杂度,避免不必要的更新操作。作者在实现过程中遇到了因条件判断不当(如x > y)导致的错误,这在调试中是一个常见的坑。
订阅专栏 解锁全文
1016

被折叠的 条评论
为什么被折叠?



