Codeforces932D. Tree
n<=400000个在线操作:树上插入一个某点权、父亲为某点的点;查询这样的最长点序列:序列的某个数必须是上一个数的祖先之一;序列的点权和不能超过x;序列的某个点的点权必须不小于上一个,且相邻两个点之间不存在点权大于等于深度大的那个点的点权的点。
说白了,就是每个点找他祖先中第一个点权大于等于他的点,然后建一棵假的树,树边表示某点如果要构造序列,序列的下一个数字就是他祖先。
分别处理:原树父亲、祖先点权最大值、假的树的父亲、假的树的祖先点权和,四个st表一个推一个即可。
//#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
//#include<map>
#include<math.h>
//#include<time.h>
//#include<complex>
#include<algorithm>
using namespace std; int n;
#define maxn 400011
#define LL long long
LL fa[maxn][],val[maxn],M[maxn][],pp[maxn][],sum[maxn][],tot=; int main()
{
scanf("%d",&n);
int last=; LL x,y,z;
for (int i=;i<=n;i++)
{
scanf("%lld%lld%lld",&x,&y,&z); y^=last; z^=last;
if (x==)
{
val[++tot]=z;
fa[tot][]=y; for (int i=;i<=;i++) fa[tot][i]=fa[fa[tot][i-]][i-];
M[tot][]=max(val[y],z); for (int i=;i<=;i++) M[tot][i]=max(M[tot][i-],M[fa[tot][i-]][i-]);
if (val[y]>=z) pp[tot][]=y;
else
{
int t=y; for (int i=;i>=;i--) if (fa[t][i] && M[t][i]<z) t=fa[t][i]; t=fa[t][];
pp[tot][]=t;
}
for (int i=;i<=;i++) pp[tot][i]=pp[pp[tot][i-]][i-];
sum[tot][]=val[tot]+val[pp[tot][]];
for (int i=;i<=;i++) sum[tot][i]=sum[tot][i-]+sum[pp[tot][i-]][i-]-val[pp[tot][i-]];
}
else
{
if (val[y]>z) {printf("%d\n",(last=)); continue;}
int t=y,ans=; for (int i=;i>=;i--) if (pp[t][i] && sum[t][i]<=z) ans+=(<<i),z-=sum[t][i]-val[pp[t][i]],t=pp[t][i];
printf("%d\n",(last=ans));
}
}
return ;
}
Codeforces932D. Tree的更多相关文章
- [数据结构]——二叉树(Binary Tree)、二叉搜索树(Binary Search Tree)及其衍生算法
二叉树(Binary Tree)是最简单的树形数据结构,然而却十分精妙.其衍生出各种算法,以致于占据了数据结构的半壁江山.STL中大名顶顶的关联容器--集合(set).映射(map)便是使用二叉树实现 ...
- SAP CRM 树视图(TREE VIEW)
树视图可以用于表示数据的层次. 例如:SAP CRM中的组织结构数据可以表示为树视图. 在SAP CRM Web UI的术语当中,没有像表视图(table view)或者表单视图(form view) ...
- 无限分级和tree结构数据增删改【提供Demo下载】
无限分级 很多时候我们不确定等级关系的层级,这个时候就需要用到无限分级了. 说到无限分级,又要扯到递归调用了.(据说频繁递归是很耗性能的),在此我们需要先设计好表机构,用来存储无限分级的数据.当然,以 ...
- 2000条你应知的WPF小姿势 基础篇<45-50 Visual Tree&Logic Tree 附带两个小工具>
在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000Things You Should Know About C# 和 2,0 ...
- Leetcode 笔记 110 - Balanced Binary Tree
题目链接:Balanced Binary Tree | LeetCode OJ Given a binary tree, determine if it is height-balanced. For ...
- Leetcode 笔记 100 - Same Tree
题目链接:Same Tree | LeetCode OJ Given two binary trees, write a function to check if they are equal or ...
- Leetcode 笔记 99 - Recover Binary Search Tree
题目链接:Recover Binary Search Tree | LeetCode OJ Two elements of a binary search tree (BST) are swapped ...
- Leetcode 笔记 98 - Validate Binary Search Tree
题目链接:Validate Binary Search Tree | LeetCode OJ Given a binary tree, determine if it is a valid binar ...
- Leetcode 笔记 101 - Symmetric Tree
题目链接:Symmetric Tree | LeetCode OJ Given a binary tree, check whether it is a mirror of itself (ie, s ...
随机推荐
- poj3616 Milking Time
思路: dp. 实现: #include <iostream> #include <cstdio> #include <algorithm> using names ...
- ceph集群一键部署脚本
分布式存储ceph相信大家比较熟悉了.某项目临时要做一个40个节点的存储集群.所以写了这个脚本. 一键部署脚本如下: git clone https://github.com/luckman666/d ...
- Java长存!12个Java长久占居主要地位的原因
Java长存!12个Java长久占居主要地位的原因 我们很容易就会遗忘那些曾经在猿群中大热而又被各种新技术掩盖直至堙灭的技术的价值.就拿COBOL这个老猿们当年所用的神器来说,就跟条死鱼一样被现代猿基 ...
- laravel学习笔记(一)
laravel 简述 优点:优雅.简洁.工程化(项目架构,协同开发) 版本:2011 June 1.0 ,LTS(long time) ,laravel 5.4 功能:队列.搜索.数据库搜索.定时脚本 ...
- IE8提速经验
给人写了个web程序,其中detail页要加载不少东西,所以耗时略长.因为bootstrap的原因,我要求用户使用chrome; 而chrome出了名的快,所以也基本没觉得什么. 后来用户因为别的原因 ...
- Cognos添加维度
1.打开后台cognos中的报表,创建查询主题 填写该维度的名称 以时间维度为例 从左边添加该维度的单位,修改名称(在Cognos前台显示),如果有逻辑在源里面修改下函数 以此类推.
- codevs 1519 过路费
时间限制: 1 s 空间限制: 256000 KB 题目等级 : 大师 Master 题目描述 Description 在某个遥远的国家里,有 n个城市.编号为 1,2,3,…,n.这个国家的政府 ...
- contos7 使用zabbix监控物理磁盘状态实例
一.系统环境: 物理机:dell R640 操作系统:centos7 二.安装MegaCli 监控主要是通过MegaCli 软件获取到物理主机的read及硬盘相关状态信息.然后通过zabbix的自定义 ...
- iview upload 上传图片 不传服务器 转 base64
开始的时候 找不到this了,后来想起来要用 ES6的箭头函数 就有this了 reader.onload = e => { // 读取到的图片base64 数据编码 将此编码字符串传给后台即可 ...
- 新时代web组件开发标准
VUE框架,则是遵行了这个标准. 1.html文件 <!DOCTYPE html><html><head lang="en"> <meta ...