loj 2011
对于第 $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的更多相关文章
- LOJ#2632. 「BalticOI 2011 Day1」打开灯泡 Switch the Lamp On
题目描述 译自 BalticOI 2011 Day1 T3「Switch the Lamp On」有一种正方形的电路元件,在它的两组相对顶点中,有一组会用导线连接起来,另一组则不会.有 N×M 个这样 ...
- 【LOJ】 #2011. 「SCOI2015」情报传递
题解 一写过一交A的一道数据结构水题 我们发现大于C可以转化为这条路径上有多少个在某天之前开始调查的情报员,离线全部读入,变成树上路径查询某个区间的数出现过多少次,构建一棵根缀的主席树,查询的时候用两 ...
- LOJ 一本通一句话题解系列:
第一部分 基础算法 第 1 章 贪心算法 1):「一本通 1.1 例 1」活动安排:按照结束时间排序,然后扫一遍就可以了. 2):「一本通 1.1 例 2」种树:首先要尽量的往区间重叠的部分种树,先按 ...
- [C#项目开源] MongoDB 可视化管理工具 (2011年10月-至今)
正文 该项目从2011年10月开始开发,知道现在已经有整整5年了.MongoDB也从一开始的大红大紫到现在趋于平淡. MongoCola这个工具在一开始定位的时候只是一个Windows版本的工具,期间 ...
- BZOJ 2440: [中山市选2011]完全平方数 [容斥原理 莫比乌斯函数]
2440: [中山市选2011]完全平方数 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3028 Solved: 1460[Submit][Sta ...
- Step by step Dynamics CRM 2011升级到Dynamics CRM 2013
原创地址:http://www.cnblogs.com/jfzhu/p/4018153.html 转载请注明出处 (一)检查Customizations 从2011升级到2013有一些legacy f ...
- http://www.cnblogs.com/youring2/archive/2011/03/28/1997694.html
http://www.cnblogs.com/youring2/archive/2011/03/28/1997694.html
- 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 ...
- http://www.blogjava.net/zhangchao/archive/2011/05/26/351051.html
http://www.blogjava.net/zhangchao/archive/2011/05/26/351051.html
随机推荐
- 轻松玩转Ant Design Pro一
ant design pro来源于ant design,其是一段自带样式的react组件,用于企业后台的漂亮的,可控的组件.ant design有很多组件和样式,不可能所有都记住,我们只要记住常用的, ...
- shellexecute的使用和X64判断
bool RunConsoleAsAdmin(std::string appPath, std::string param, bool wait) { LOG_INFO << " ...
- Python-demo(抖音)
# -*- coding:utf-8 -*- from mitmproxy import ctx import json import requests import time import os p ...
- 基于NetCore+SqlSugar+Layui开发出来的开源框架项目FytSoaCms问题处理
最近刚好在学习NetCore框架所以就在网上搜索了一下相关的开源框架项目,正好在Github上找到了一个不错的开源框架所以推荐给大家看看哈哈哈. 1:项目相关技术 运行NetCore SDK版本为2. ...
- 我自己用C++写了个GMM(Gaussian mixture model)模型
我自己用C++写了个GMM(Gaussian mixture model)模型 Written for an assignment 之前粗粗了解了GMM的原理,但是没有细看,现在有个Assignmen ...
- Fortify漏洞之XML External Entity Injection(XML实体注入)
继续对Fortify的漏洞进行总结,本篇主要针对 XML External Entity Injection(XML实体注入) 的漏洞进行总结,如下: 1.1.产生原因: XML External ...
- arm9交叉编译工具链
Arm-linux-gcc: gcc和arm-linux-gcc的头文件并不一样. Eg. Arm-linux-ld:链接器,-T参数是使用链接器脚本. Eg. Arm-linux-readelf:读 ...
- ELK文档-安装部署
一.ELK简介 请参考:http://www.cnblogs.com/aresxin/p/8035137.html 二.ElasticSearch安装部署 请参考:http://blog.51cto. ...
- 学习使用Django2 前台页面展示
Django 2.1 python 3.7 创建一个虚拟环境 python -m venv 虚拟环境名称 进入虚拟环境 下载django pip install django==2.1 创 ...
- SOUL软件小结
soul 基于心灵的智能社交APP.功能是寻找最适合自己的灵魂伴侣 基于心灵测试给你智能匹配最简单的社交关系 匿名聊天软件一般都是没有机器人的,机器人一般不能对点聊很长时间 用户来源与动机 用户引流来 ...