关于线段树:
看到大部分大佬都是用lazytag做的。。
但是我以前一直学的是直接记录附加值……?
就是这种:
inline void build(int n)
{
//Sn是不小于n的最小2的整数幂
for (int i = 1; i <= n; i++)
{
addv[i + Sn - 1] = QAQ[i];
}
for (int i = Sn - 1; i; i--)sum[i] = (addv[i << 1] + addv[(i << 1) ^ 1]) % mod;
}
int res;
inline void query(int u, int l, int r, int L, int R, int adds)
{
if (L <= l&&r <= R){ res += sum[u] + ((addv[u] + adds) * (r - l + 1)); res %= mod; return; }
else
{
int M = l + (r - l) / 2;
if (L <= M)query(u << 1, l, M, L, R, (adds + addv[u]) % mod);
if (R > M)query((u << 1) ^ 1, M + 1, r, L, R, (adds + addv[u]) % mod);
}
}
#define min(a,b) (a>b?b:a)
#define max(a,b) (a<b?b:a)
inline void update(int u, int l, int r, int L, int R, int k){
if (L <= l&&r <= R)
{
addv[u] += k;
addv[u] %= mod;
}
else
{
int mid = l + (r - l) / 2;
if (L <= mid)update(u<<1,l,mid, L, R, k);
if (R>mid)update((u << 1) ^ 1, mid+1, r, L, R, k);
sum[u] = (sum[u] + k*(1+min(r, R) - max(l, L))) % mod;
}
}
主要想问:
这种写法的常数和lazytag相比哪个小?
求大佬解答CCCCCCCCCCCCCCCCCCCCOrz