线段树平方和板子

题目测试链接

代码

/*Author : lifehappy
*/
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include <bits/stdc++.h>
#define mp make_pair
#define pb push_back
#define endl '\n'
#define mid (l + r >> 1)
#define lson rt << 1, l, mid
#define rson rt << 1 | 1, mid + 1, r
#define ls rt << 1
#define rs rt << 1 | 1using namespace std;typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;const double pi = acos(-1.0);
const double eps = 1e-7;
const int inf = 0x3f3f3f3f;inline ll read() {ll f = 1, x = 0;char c = getchar();while(c < '0' || c > '9') {if(c == '-')    f = -1;c = getchar();}while(c >= '0' && c <= '9') {x = (x << 1) + (x << 3) + (c ^ 48);c = getchar();}return f * x;
}void print(ll x) {if(x < 10) {putchar(x + 48);return ;}print(x / 10);putchar(x % 10 + 48);
}const int N = 1e5 + 10, mod = 23333;ll res[N << 2], sum[N << 2], lazy[N << 2];//线段树数组。
ll value[N];
int head[N], to[N << 1], nex[N << 1], cnt = 1;
int n, m, dfn[N], sz[N], tot, st[N];void add(int x, int y) {to[cnt] = y;nex[cnt] = head[x];head[x] = cnt++;
}void dfs(int rt, int fa) {dfn[++tot] = rt;st[rt] = tot;sz[rt] = 1;for(int i = head[rt]; i; i = nex[i]) {if(to[i] == fa) continue;dfs(to[i], rt);sz[rt] += sz[to[i]];}
}void push_up(int rt) {res[rt] = (res[ls] + res[rs]) % mod;sum[rt] = (sum[ls] + sum[rs]) % mod;
}void build_tree(int rt, int l, int r) {if(l == r) {sum[rt] = value[dfn[l]] % mod;res[rt] = (sum[rt] * sum[rt]) % mod;return ;}build_tree(lson);build_tree(rson);push_up(rt);
}void push_down(int rt, int l, int r) {if(lazy[rt]) {lazy[ls] += lazy[rt], lazy[rs] += lazy[rt];res[ls] = (res[ls] + (((lazy[rt] * lazy[rt]) % mod) * (mid - l + 1)) % mod + (2ll * sum[ls] * lazy[rt]) % mod) % mod;res[rs] = (res[rs] + (((lazy[rt] * lazy[rt]) % mod) * (r - mid)) % mod + (2ll * sum[rs] * lazy[rt]) % mod) % mod;sum[ls] = (sum[ls] + (mid - l + 1) * lazy[rt]) % mod;sum[rs] = (sum[rs] + (r - mid) * lazy[rt]) % mod;lazy[rt] = 0;}
}void update(int rt, int l, int r, int L, int R, ll k) {if(l >= L && r <= R) {lazy[rt] += k;res[rt] = (res[rt] + (((k * k) % mod) * (r - l + 1)) % mod + (2ll * sum[rt] * k) % mod) % mod;sum[rt] = (sum[rt] + (r - l + 1) * k) % mod;return ;}push_down(rt, l, r);if(L <= mid) update(lson, L, R, k);if(R > mid)  update(rson, L, R, k);push_up(rt);
}ll query(int rt, int l, int r, int L, int R){if(l >= L && r <= R)  return res[rt];push_down(rt, l, r);ll ans = 0;if(L <= mid) ans += query(lson, L, R);if(R > mid)  ans += query(rson, L, R);return ans;
}int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);// ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);n = read(), m = read();for(int i = 1; i <= n; i++) value[i] = read();for(int i = 1; i < n; i++) {int x = read(), y = read();add(x, y);add(y, x);}dfs(1, 0);build_tree(1, 1, n);for(int i = 1; i <= m; i++) {int op = read();if(op == 1) {int x = read(), y = read();update(1, 1, n, st[x],st[x] + sz[x] - 1, y % mod);}else {int x = read();printf("%lld\n", query(1, 1, n, st[x],st[x] + sz[x] - 1) % mod);}}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/314513.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Codeforces Round #743 (Div. 2) E. Paint 区间dp + 暴力

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你一个有nnn个像素的图像&#xff0c;每个像素都有一个颜色aia_iai​&#xff0c;保证每种颜色的图像不会超过202020个。你现在每次可以选择一个颜色&#xff0c;并选择一段连续的像素&#xff0c;要求连续…

史上最能“拜客户教”的公司,是如何做到持续交付的?(第2趴)|DevOps案例研究...

内容来源&#xff1a;DevOps案例深度研究 –Amazon持续交付之道战队&#xff08;本文只展示部分PPT及研究成果&#xff0c;更多细节请关注案例分享会&#xff0c;及本公众号。&#xff09;本案例内容贡献者&#xff1a;单冰 (Topic Leader)、 赵栋、梁兴龙、李杰、毛艳清、牛恒…

C 简单瞎搞题(牛客练习赛22)(bitset优化dp)

Bitset优化Dp 题目链接 一般DP做法 显然后面的数是与前面的数字相关的&#xff0c;所以我们有dp数组&#xff0c;dp[i][j]dp[i][j]dp[i][j]选取了jjj个数&#xff0c;iii是否可以被创造出来&#xff0c;如果可以其值为1&#xff0c;否则为0。 所以我们显然有如下的状态转移…

AtCoder Regular Contest 125

传送门 A−DialUpA-Dial UpA−DialUp 贪心贪心贪心 首先当bbb有aaa没有的元素的时候显然无解&#xff0c;否则我们可以找到离a1a_1a1​最近的一个!a1!a_1!a1​&#xff0c;让后交替着来构造bbb即可。 int n,m; int a[N],b[N];int main() { // ios::sync_with_stdio(false); /…

ASP.NET Core on K8S深入学习(3)Deployment

上一篇《部署过程解析与安装Dashboard》中我们了解K8S的部署过程&#xff0c;这一篇我们来了解一下K8S为我们提供的几种应用运行方式&#xff1a;Deployment、DaemonSet与Job&#xff0c;它们是Kubernetes最重要的核心功能提供者。考虑到篇幅和更新速度&#xff0c;我将其分为两…

Codeforces Round #742 (Div. 2) F. One-Four Overload 构造 + 二分图染色

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你一个n∗mn*mn∗m的矩形&#xff0c;包含...和XXX&#xff0c;你有两种颜色&#xff0c;你需要给...染色使得每个XXX上下左右相邻的...其两种颜色个数相同&#xff0c;输出一种合法方案。 1≤n,m≤5001\l…

同余最短路(P3403 跳楼机)

同余最短路 前置 给定m个数&#xff0c;这m个数可以重复取&#xff0c;问最大的这m个数不能拼成的数&#xff0c;或者给定一定范围&#xff0c;范围里有多少个数是这m个数可以拼成的&#xff0c;对于这种问题我们可以考虑同余最短路的算法。 P3403 跳楼机 同余最短路介绍 …

8月语言排行:C#继续呈现增长态势

TIOBE 编程语言排行榜 8 月更新已公布&#xff0c;排名前十的分别是&#xff1a;Java, C, Python, C, C#, Visual Basic .NET, JavaScript, PHP, Objective-C 和 SQL。和上个月唯一的不同之处在于 Objective-C 和 SQL 的排名发生了交换。事实上&#xff0c;上周 Dice Insights …

Codeforces Round #538 (Div. 2) F. Please, another Queries on Array? 线段树 + 欧拉函数

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你一个序列aaa&#xff0c;你需要实现两种操作&#xff1a; (1)(1)(1) 将[l,r][l,r][l,r]的aia_iai​都乘rrr。 (2)(2)(2) 求ϕ(∏ilrai)mod1e97\phi(\prod_{il}^ra_i)\bmod 1e97ϕ(∏ilr​ai​)mod1e97 1…

P2662 牛场围栏(同余最短路)

P2662 牛场围栏 思路 假设我们已经知道同余最短路是什么了&#xff0c;这里就不再过多赘述。 我们要尽可能地得到更多地课建成地边&#xff0c;那么我们必然要选一个basebasebase相对小的&#xff0c;因此我们可以对所有的棍子排个序&#xff0c;然后取a[1]−ma[1] - ma[1]−…

面试必谈的哈希,.Net 程序员温故而知新

引言&#xff1a;作为资深老鸟&#xff0c;有事没事&#xff0c;出去面试&#xff1b;找准差距、定位价值。面试必谈哈希&#xff0c;Q1&#xff1a;什么是哈希?Q2&#xff1a;哈希为什么快?Q3&#xff1a;你是怎么理解哈希算法利用空间换取时间的&#xff1f;Q4&#xff1a;…

P3804 【模板】后缀自动机 (SAM)

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你一个字符串sss&#xff0c;让你求sss中出现次数不为111的子串出现次数乘上该字串长度最大值。 ∣s∣≤1e6|s|\le 1e6∣s∣≤1e6 思路&#xff1a; 没学明白&#xff0c;不多bbbbbb&#xff0c;把树建出…

Grpc Proto To Nuget Package 插件使用说明

Grpc Proto To Nuget Package 是一个 VS 插件&#xff08;支持 VS2019&#xff09;&#xff0c;目的是将基于 gRPC 的接口定义 .proto 文件一键转成 Nuget Package&#xff0c;然后发布到私有仓库上。下载最新 GrpcProtoToNugetPackageTemplate.zip ASP.NET 的项目模板&#xf…

HDU 6071 Lazy Running(同余最短路的应用)

Lazy Running 思路 还是利用同余的思想&#xff0c;假设存在一条长度为kkk的路&#xff0c;那么也一定存在一条kbasek basekbase的路base2∗min(d1,d2)base 2 * min(d1, d2)base2∗min(d1,d2)。 dis[i][j]xdis[i][j] xdis[i][j]x表示的是&#xff0c;从2−>i2 -> i2…

P2408 不同子串个数 SAM

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 求sss中本质不同的字串个数。 1≤∣s∣≤1e51\le |s|\le 1e51≤∣s∣≤1e5 思路&#xff1a; 显然&#xff0c; 个数就是∑(len[i]−len[fa[i]])\sum (len[i]-len[fa[i]])∑(len[i]−len[fa[i]])。 //#pr…

.NET Core 3.0预览版7中的ASP.NET Core和Blazor更新

.NET Core 3.0 Preview 7现已推出&#xff0c;它包含一系列ASP.NET Core和Blazor的新更新。以下是此预览中的新功能列表&#xff1a;最新的Visual Studio预览包括.NET Core 3.0作为默认运行时Visual Studio中的顶级ASP.NET核心模板简化的网页模板组件的属性splattingTypeConver…

数列分块入门 (1 ~ 7)

分块 6277. 数列分块入门 1 分块思想 我们把每m个元素分成一块&#xff0c;所以我们总共的块数就是n/mn / mn/m块&#xff0c;一般情况下我们取mnm \sqrt{n}mn​.对于区间加操作&#xff0c;我们可以先暴力左右两边&#xff0c;然后对于中间的整块的部分的加减&#xff0c;…

UVA719 Glass Beads 最小表示 / 后缀自动机

传送门 题意&#xff1a; 求sss的最小表示。 ∣s∣≤1e4|s|\le 1e4∣s∣≤1e4 思路&#xff1a; 可以选择直接套最小表示法的板子&#xff0c;但也可以将sss复制&#xff0c;即ssssssssssss&#xff0c;对ssssss建samsamsam&#xff0c;让后贪心的找一个长度为nnn的字典序最…

你必须知道的Docker数据卷

本篇已加入《.NET Core on K8S学习实践系列文章索引》&#xff08;微信上暂无法访问&#xff0c;可以通过cnblogs博客园访问&#xff09;&#xff0c;可以点击查看更多容器化技术相关系列文章。本篇预计阅读时间为5分钟。01—Docker数据挂载到容器在Docker中&#xff0c;要想实…

牛客小白月赛11:Rinne Loves Data Structure

Rinne Loves Data Structure 思路 我们插入的位置大概分了四种&#xff1a; 第一种 显然我们找到比当前插入的值的pre&#xff0c;也就是比当前节点大的最小值。 第二种 我们只要找到当前节点的suc&#xff0c;也就是比当前节点小的&#xff0c;最大值。 第三种 我们只…