[测试] Markdown+Latex
标题
标题
标题
标题
标题
标题
#include <cstdio>
#define R register int
#define I inline void
#define IL inline
#define ls c[x][0]
#define rs c[x][1]
const int _ = 3e5 + 5;
int n, m;
struct Link_Cut_Tree
{
int f[_], c[_][2], v[_], s[_], st[_], r[_];
I _swap(R &x, R &y) { R t = x; x = y; y = t; }
IL bool nroot(R x) { return c[f[x]][0] == x || c[f[x]][1] == x; }
I pushup(R x) { s[x] = s[ls] ^ s[rs] ^ v[x]; }
I pushr(R x) { _swap(ls, rs); r[x] ^= 1; }
I pushdown(R x) { if(r[x]) { if(ls) pushr(ls); if(rs) pushr(rs); r[x] = 0; } }
I pushall(R x) { if(nroot(x)) pushall(f[x]); pushdown(x); }
I rotate(R x) {
R y = f[x], z = f[y], k = c[y][1] == x, w = c[x][!k];
if(nroot(y)) c[z][c[z][1] == y] = x; c[x][!k] = y; c[y][k] = w;
if(w) f[w] = y; f[y] = x; f[x] = z; pushup(y);
}
I splay(R x) {
R y, z; pushall(x);
while(nroot(x)) {
y = f[x]; z = f[y];
if(nroot(y)) rotate((c[y][0] == x) ^ (c[z][0] == y) ? x : y);
rotate(x);
} pushup(x);
}
I access(R x) { for(R y = 0; x; x = f[y = x]) splay(x), rs = y, pushup(x); }
I makeroot(R x) { access(x); splay(x); pushr(x); }
IL int findroot(R x) { access(x); splay(x); while(ls) pushdown(x), x = ls; splay(x); return x; }
I split(R x, R y) { makeroot(x); access(y); splay(y); }
I link(R x, R y) { makeroot(x); if(findroot(y) != x) f[x] = y; }
I cut(R x, R y) {
makeroot(x); if(findroot(y) != x || f[y] != x || c[y][0]) return;
f[y] = c[x][1] = 0; pushup(x);
}
}lct;
int main()
{
int opt, x, y;
scanf("%d%d", &n, &m);
for(R i = 1; i <= n; ++i) scanf("%d", &lct.v[i]);
while(m--) {
scanf("%d%d%d", &opt, &x, &y);
if(opt == 0) lct.split(x, y), printf("%d\n", lct.s[y]);
else if(opt == 1) lct.link(x, y);
else if(opt == 2) lct.cut(x, y);
else if(opt == 3) lct.splay(x), lct.v[x] = y;
}
return 0;
}
#include <iostream>
#include <cstdio>
#define ll long long
using namespace std;
const int N = 1e5 + 10;
int n,m,root,mod,cnt,a[N],father[N],deep[N],size[N],son[N],rk[N],top[N],id[N];
struct Edge {
int Next, to;
}e[N<<1];
int head[N], num;
void add(int from, int to) {
e[++num].Next = head[from];
e[num].to = to;
head[from] = num;
}
struct Segment_Tree
{
ll ans[N<<2], tag[N<<2];
inline ll ls(ll p) { return p << 1; }
inline ll rs(ll p) { return p << 1 | 1; }
inline void pushup(ll p) {
ans[p] = (ans[ls(p)] + ans[rs(p)]) % mod;
}
inline void pushdown(ll p, ll l, ll r) {
ll mid = (l + r) >> 1;
ans[ls(p)] += (mid - l + 1) * tag[p] % mod;
tag[ls(p)] += tag[p] % mod;
ans[rs(p)] += (r - mid) * tag[p] % mod;
tag[rs(p)] += tag[p] % mod;
tag[p] = 0;
}
void build(ll p, ll l, ll r) {
if(l == r) {
ans[p] = a[rk[l]];
return;
}
ll mid = (l + r) >> 1;
build(ls(p), l, mid);
build(rs(p), mid + 1, r);
pushup(p);
}
void update(ll p, ll l, ll r, ll ul, ll ur, ll k) {
if(ul <= l && r <= ur) {
ans[p] += (r - l + 1) * k % mod;
tag[p] += k % mod;
return;
}
if(tag[p]) pushdown(p, l, r);
ll mid = (l + r) >> 1;
if(ul <= mid) update(ls(p), l, mid, ul, ur, k);
if(ur > mid) update(rs(p), mid + 1, r, ul, ur, k);
pushup(p);
}
ll query(ll p, ll l, ll r, ll ql, ll qr) {
if(ql <= l && r <= qr)
return ans[p];
if(tag[p]) pushdown(p, l, r);
ll mid = (l + r) >> 1, res = 0;
if(ql <= mid) res = (res + query(ls(p), l, mid, ql, qr)) % mod;
if(qr > mid) res = (res + query(rs(p), mid + 1, r, ql, qr)) % mod;
return res % mod;
}
}T;
struct lianpou
{
void dfs1(int u, int f, int depth)
{
father[u] = f;
deep[u] = depth;
size[u] = 1;
for(int i = head[u]; i; i = e[i].Next)
{
int v = e[i].to;
if(v == f) continue;
dfs1(v, u, depth + 1);
size[u] += size[v];
if(size[v] > size[son[u]])
son[u] = v;
}
}
void dfs2(int u, int tp)
{
top[u] = tp;
id[u] = ++cnt;
rk[cnt] = u;
if(!son[u]) return;
dfs2(son[u], tp);
for(int i = head[u]; i; i = e[i].Next)
{
int v = e[i].to;
if(v != son[u] && v != father[u])
dfs2(v, v);
}
}
ll sum(int x, int y)
{
ll ans = 0;
int fx = top[x], fy = top[y];
while(fx != fy)
{
if(deep[fx] >= deep[fy]) {
ans = (ans + T.query(1, 1, n, id[fx], id[x])) % mod;
x = father[fx], fx = top[x];
}
else {
ans = (ans + T.query(1, 1, n, id[fy], id[y])) % mod;
y = father[fy], fy = top[y];
}
}
if(id[x] > id[y]) swap(x, y);
ans = (ans + T.query(1, 1, n, id[x], id[y])) % mod;
return ans % mod;
}
void update(int x, int y, int z)
{
int fx = top[x], fy = top[y];
while(fx != fy)
{
if(deep[fx] >= deep[fy]) {
T.update(1, 1, n, id[fx], id[x], z);
x = father[fx], fx = top[x];
}
else
{
T.update(1, 1, n, id[fy], id[y], z);
y = father[fy], fy = top[y];
}
}
if(id[x] > id[y]) swap(x, y);
T.update(1, 1, n, id[x], id[y], z);
}
}L;
int main()
{
scanf("%d%d%d%d", &n, &m, &root, &mod);
for(int i = 1; i <= n; i++)
scanf("%lld", &a[i]);
for(int i = 1, u, v; i < n; i++)
{
scanf("%d%d", &u, &v);
add(u,v); add(v,u);
}
L.dfs1(root, 0, 1);
L.dfs2(root, root);
T.build(1, 1, n);
for(int i = 1, opt, x, y, z; i <= m; i++)
{
scanf("%d", &opt);
if(opt == 1)
{
scanf("%d%d%d", &x, &y, &z);
L.update(x, y, z);
}
else if(opt == 2)
{
scanf("%d%d", &x, &y);
printf("%lld\n", L.sum(x, y));
}
else if(opt == 3)
{
scanf("%d%d", &x, &z);
T.update(1, 1, n, id[x], id[x] + size[x] - 1, z);
}
else if(opt == 4)
{
scanf("%d", &x);
printf("%lld\n", T.query(1, 1, n, id[x], id[x] + size[x] - 1));
}
}
return 0;
}













[测试] Markdown+Latex的更多相关文章
- MarkDown+LaTex 数学内容编辑样例收集
$\color{green}{MarkDown+LaTex 数学内容编辑样例收集}$ 1.大小标题的居中,大小,颜色 [例1] $\color{Blue}{一元二次方程根的分布}$ $\color{R ...
- 奇怪的 Markdown / LaTeX 笔记
记一下日常见到的一些奇怪的 Markdown / LaTeX 用法... Markdown LaTeX LaTeX 数学 1. 运算符 1.1 造运算符: a \operatorname{sin} c ...
- markdown | Latex | 书写测试
我永远喜欢markdown! 建图 graph TD; 1-->2 1-->3 1-->4 2-->5 2-->6 3-->7 3-->8 4-->9 ...
- 测试markdown语法
测试使用markdown 这是无序列表 空调 洗衣机 电脑 这是有序列表 西瓜 哈密瓜 火龙果 下划线bingo 测试 斜体好丑 粗体很赞 测试插入代码 $(document).ready(funct ...
- 测试markdown 博客功能
欢迎使用 Cmd - 在线 Markdown 编辑阅读器 我们理解您需要更便捷更高效的工具记录思想,整理笔记.知识,并将其中承载的价值传播给他人,Cmd Markdown 是我们给出的答案 -- 我们 ...
- R+markdown+LaTeX 中文编译解决方案
一丢丢前言 很久之前曾试图以Rmarkdown编译pdf文档,无奈怎么鼓捣都会error,搜索了很久都没能找到比较好的解决方案.在配置上将编译器调成了xeLaTeX后就不了了之.这两天心血来潮研究了一 ...
- Markdown & LaTex 常用语法
目录 blog 的目录 博客园自带目录 用 javascript 自定义目录 主标题 副标题 h1,一级标题 h2,二级标题 h3,三级标题 注释 常用的符号及文本形式 如果你想在markdown中文 ...
- 利用Mathpix Snipping Tool轻松在markdown/LaTeX中输入电子书和论文的数学公式
最近写图形学博客写累了,公式太多了,一个个输入实在太累,所以从数学建模队友那里吃了一个安利. 官网下载 下载安装后,直接新建一个截图,就可以转成LaTeX数学公式了.效果如下: 爽的一批啊!!! 另外 ...
- 测试数学公式latex
\( J_\alpha(x) = \sum\limits_{m=0}^\infty \frac{(-1)^m}{m! + 1)}{\left({\frac{x}{2}}\right)}^{2 m + ...
随机推荐
- Oracle简介及安装
一.轨迹 二.Oracle简介 Oracle是现在全世界最大的数据库提供商,编程语言提供商,应用软件提供商,它的地位等价于微软的地位. Oracle在古希腊神话中被称为“神谕”,指的是上帝的宠儿,在中 ...
- [日常] Go语言圣经--作用域,基础数据类型,整型
go语言圣经-作用域 1.一个声明语句将程序中的实体和一个名字关联,比如一个函数或一个变量 2.一个变量的生命周期是指程序运行时变量存在的有效时间段;声明语句的作用域对应的是一个源代码的文本区域,它是 ...
- 撩课-Web大前端每天5道面试题-Day33
1.CommonJS 中的 require/exports 和 ES6 中的 import/export 区别? CommonJS 模块的重要特性是加载时执行, 即脚本代码在 require 的时候, ...
- leetcode958二叉树的完全检验-java
最近项目刚刚检查了,又有时间刷leetcode了,一道中等的树1个小时才通过,太久不做了.. 给定一个二叉树,确定它是否是一个完全二叉树. 百度百科中对完全二叉树的定义如下: 若设二叉树的深度为 h, ...
- Three.js开发指南---创建,加载高级网格和几何体(第八章)
本章的主要内容: 一, 通过Three.js自带的功能来组合和合并已有的几何体,创建出新的几何体 二, 从外部资源中加载网格和几何体 1 前面的章节中,我们学习到,一个几何体创建的网格,想使用多个材质 ...
- 排序算法(6)--exchang Sorting--交换排序[1]--Bubble Sort--冒泡排序
1.基本思想 冒泡排序的基本思想是,对相邻的元素进行两两比较,顺序相反则进行交换,这样,每一趟会将最小或最大的元素“浮”到顶端,最终达到完全有序 2.实现原理 冒泡排序是一种简单的排序算法,根据顺序两 ...
- Spring boot初入门
1. Spring的Java配置方式 Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置. 1.1. @Configuration 和 @Bean Spring的Java配置方式是 ...
- Microsoft MVP MSDN Magazine 最新期分享
下载地址:http://1105insight.com/portal/wts/uemcmQeeDyaq%5Ev2gAe6c3b0Djd 可在线或下载查看
- kafka-hadoop-consumer
写了一个工具,从kafka传输数据到hdfs,采用的api,可以消费指定的kafka topic 或者为了简便可以消费所有的topic中各个partition的数据. 地址:https://githu ...
- jquery-jtemplates.js模板应用
jquery-jtemplates.js下载地址:https://gitee.com/nelsonlei/jquery-jtemplates.jsMoBanYingYong <!DOCTYPE ...