对于第 $i$ 天的询问
前 $i - c - 1$ 天都会影响答案
主席树维护

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <string> using namespace std; #define int long long #define LL long long #define gc getchar()
inline int read() {int x = ; char c = gc; while(c < '' || c > '') c = gc;
while(c >= '' && c <= '') x = x * + c - '', c = gc; return x;}
inline LL read_LL() {LL x = ; char c = gc; while(c < '' || c > '') c = gc;
while(c >= '' && c <= '') x = x * + c - '', c = gc; return x;}
#undef gc const int N = 2e5 + ; int Root[N], Lson[N * ], Rson[N * ], W[N * ];
struct Node {int v, nxt;} G[N];
int head[N], cnt;
int n, q, Rt; int fa[N], deep[N], size[N], topp[N], son[N], tree[N], treejs; inline void Link(int u, int v) {G[++ cnt].v = v; G[cnt].nxt = head[u]; head[u] = cnt;} void Dfs_1(int u, int f_, int depth) {
fa[u] = f_, deep[u] = depth, size[u] = ;
for(int i = head[u]; ~ i; i = G[i].nxt) {
int v = G[i].v;
if(v == f_) continue;
Dfs_1(v, u, depth + );
size[u] += size[v];
if(size[v] > size[son[u]]) son[u] = v;
}
} void Dfs_2(int u, int tp) {
topp[u] = tp, tree[u] = ++ treejs;
if(!son[u]) return ;
Dfs_2(son[u], tp);
for(int i = head[u]; ~ i; i = G[i].nxt) {
int v = G[i].v;
if(v != fa[u] && v != son[u]) Dfs_2(v, v);
}
} inline int Lca(int x, int y) {
int tpx = topp[x], tpy = topp[y];
while(tpx != tpy) {
if(deep[tpx] < deep[tpy]) swap(x, y), swap(tpx, tpy);
x = fa[tpx], tpx = topp[x];
}
return deep[x] < deep[y] ? x : y;
} int Hjt; void Fill(int x, int y) {
Lson[x] = Lson[y], Rson[x] = Rson[y], W[x] = W[y];
} #define lson jd << 1
#define rson jd << 1 | 1 void Sec_G(int &rt, int l, int r, int x) {
Fill(++ Hjt, rt);
rt = Hjt;
W[rt] ++;
if(l == r) return ;
int mid = (l + r) >> ;
if(x <= mid) Sec_G(Lson[rt], l, mid, x);
else Sec_G(Rson[rt], mid + , r, x);
} int Ans; void Sec_A(int rt, int l, int r, int x, int y) {
if(!rt) return ;
if(x <= l && r <= y) {
Ans += W[rt];
return ;
}
int mid = (l + r) >> ;
if(x <= mid) Sec_A(Lson[rt], l, mid, x, y);
if(y > mid ) Sec_A(Rson[rt], mid + , r, x, y);
} inline int Sec_A_imp(int rt, int x, int y) {
if(rt <= ) return ;
int ret = , tpx = topp[x], tpy = topp[y];
while(tpx != tpy) {
if(deep[tpx] < deep[tpy]) swap(x, y), swap(tpx, tpy);
Ans = ;
Sec_A(Root[rt], , n, tree[tpx], tree[x]);
ret += Ans;
x = fa[tpx], tpx = topp[x];
}
if(deep[x] < deep[y]) swap(x, y);
Ans = ;
Sec_A(Root[rt], , n, tree[y], tree[x]);
ret += Ans;
return ret;
} main() {
n = read();
for(int i = ; i <= n; i ++) head[i] = -;
for(int i = ; i <= n; i ++) {
int v = read();
if(!v) Rt = i;
else Link(v, i);
}
Dfs_1(Rt, , );
Dfs_2(Rt, Rt);
q = read();
for(int i = ; i <= q; i ++) {
int opt = read();
Root[i] = Root[i - ];
if(opt == ) {
int x = read(), y = read(), C = read();
int a = deep[x] + deep[y] - * deep[Lca(x, y)] + ;
int b = Sec_A_imp(i - C - , x, y);
cout << a << " " << b << "\n";
} else {
int x = read();
Sec_G(Root[i], , n, tree[x]);
}
}
return ;
}

loj 2011的更多相关文章

  1. LOJ#2632. 「BalticOI 2011 Day1」打开灯泡 Switch the Lamp On

    题目描述 译自 BalticOI 2011 Day1 T3「Switch the Lamp On」有一种正方形的电路元件,在它的两组相对顶点中,有一组会用导线连接起来,另一组则不会.有 N×M 个这样 ...

  2. 【LOJ】 #2011. 「SCOI2015」情报传递

    题解 一写过一交A的一道数据结构水题 我们发现大于C可以转化为这条路径上有多少个在某天之前开始调查的情报员,离线全部读入,变成树上路径查询某个区间的数出现过多少次,构建一棵根缀的主席树,查询的时候用两 ...

  3. LOJ 一本通一句话题解系列:

    第一部分 基础算法 第 1 章 贪心算法 1):「一本通 1.1 例 1」活动安排:按照结束时间排序,然后扫一遍就可以了. 2):「一本通 1.1 例 2」种树:首先要尽量的往区间重叠的部分种树,先按 ...

  4. [C#项目开源] MongoDB 可视化管理工具 (2011年10月-至今)

    正文 该项目从2011年10月开始开发,知道现在已经有整整5年了.MongoDB也从一开始的大红大紫到现在趋于平淡. MongoCola这个工具在一开始定位的时候只是一个Windows版本的工具,期间 ...

  5. BZOJ 2440: [中山市选2011]完全平方数 [容斥原理 莫比乌斯函数]

    2440: [中山市选2011]完全平方数 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3028  Solved: 1460[Submit][Sta ...

  6. Step by step Dynamics CRM 2011升级到Dynamics CRM 2013

    原创地址:http://www.cnblogs.com/jfzhu/p/4018153.html 转载请注明出处 (一)检查Customizations 从2011升级到2013有一些legacy f ...

  7. http://www.cnblogs.com/youring2/archive/2011/03/28/1997694.html

    http://www.cnblogs.com/youring2/archive/2011/03/28/1997694.html

  8. Microsoft Dynamics CRM 2013 and 2011 Update Rollups and Service Packs

      Microsoft Dynamics CRM 2013   BTW: RC stands for Release for Candidate, and RTM stands for Release ...

  9. http://www.blogjava.net/zhangchao/archive/2011/05/26/351051.html

    http://www.blogjava.net/zhangchao/archive/2011/05/26/351051.html

随机推荐

  1. 轻松玩转Ant Design Pro一

    ant design pro来源于ant design,其是一段自带样式的react组件,用于企业后台的漂亮的,可控的组件.ant design有很多组件和样式,不可能所有都记住,我们只要记住常用的, ...

  2. shellexecute的使用和X64判断

    bool RunConsoleAsAdmin(std::string appPath, std::string param, bool wait) { LOG_INFO << " ...

  3. Python-demo(抖音)

    # -*- coding:utf-8 -*- from mitmproxy import ctx import json import requests import time import os p ...

  4. 基于NetCore+SqlSugar+Layui开发出来的开源框架项目FytSoaCms问题处理

    最近刚好在学习NetCore框架所以就在网上搜索了一下相关的开源框架项目,正好在Github上找到了一个不错的开源框架所以推荐给大家看看哈哈哈. 1:项目相关技术 运行NetCore SDK版本为2. ...

  5. 我自己用C++写了个GMM(Gaussian mixture model)模型

    我自己用C++写了个GMM(Gaussian mixture model)模型 Written for an assignment 之前粗粗了解了GMM的原理,但是没有细看,现在有个Assignmen ...

  6. Fortify漏洞之XML External Entity Injection(XML实体注入)

    继续对Fortify的漏洞进行总结,本篇主要针对  XML External Entity Injection(XML实体注入) 的漏洞进行总结,如下: 1.1.产生原因: XML External ...

  7. arm9交叉编译工具链

    Arm-linux-gcc: gcc和arm-linux-gcc的头文件并不一样. Eg. Arm-linux-ld:链接器,-T参数是使用链接器脚本. Eg. Arm-linux-readelf:读 ...

  8. ELK文档-安装部署

    一.ELK简介 请参考:http://www.cnblogs.com/aresxin/p/8035137.html 二.ElasticSearch安装部署 请参考:http://blog.51cto. ...

  9. 学习使用Django2 前台页面展示

    Django  2.1  python 3.7 创建一个虚拟环境 python  -m  venv  虚拟环境名称 进入虚拟环境 下载django pip install  django==2.1 创 ...

  10. SOUL软件小结

    soul 基于心灵的智能社交APP.功能是寻找最适合自己的灵魂伴侣 基于心灵测试给你智能匹配最简单的社交关系 匿名聊天软件一般都是没有机器人的,机器人一般不能对点聊很长时间 用户来源与动机 用户引流来 ...