正题


题目大意

一棵树,对于每个点,求从任何一个在该点的子树为头,以该点为结尾的序列必须选择这个点的最长不降子序列。


解题思路

首先我们使用权值线段树计算答案每个点(l,r,w)(l,r,w)(l,r,w)表示以l∼rl\sim rl∼r为结尾最长的不降升子序列长度。

然后利用线段树维护,每次跑完子节点之后将线段树合并到父节点上来计算答案。

时间复杂度O(nlogn)O(n\ log\ n)O(n log n)


codecodecode

#pragma GCC optimize(2)
%:pragma GCC optimize(3)
%:pragma GCC optimize("Ofast")
%:pragma GCC optimize("inline")
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
const int N=101000;
int n,rt[N],tot,ls[N],ans[N],w[N];
struct Edge_node{int to,next;
}a[N];
struct Tree_node{int w,l,r,lson,rson;
};
vector<int> q[N],c[N];
struct Line_cut_tree{Tree_node t[N*20];int tot;#define ls t[x].lson#define rs t[x].rsonint Ask(int x,int l,int r,int L,int R){if(!x) return 0; if(L==l&&R==r)return t[x].w;int mid=(L+R)/2;if(r<=mid) return Ask(ls,l,r,L,mid);else if(l>mid) return Ask(rs,l,r,mid+1,R);else return max(Ask(ls,l,mid,L,mid),Ask(rs,mid+1,r,mid+1,R));}void Change(int &x,int pos,int z,int L,int R){if(!x) x=++tot;if(L==R){t[x].w=max(z,t[x].w);return;}int mid=(L+R)/2;if(pos<=mid) Change(ls,pos,z,L,mid);else if(pos>mid) Change(rs,pos,z,mid+1,R);t[x].w=max(t[ls].w,t[rs].w);}int merge(int x,int y,int L,int R){if(!x||!y)return x+y;t[x].w=max(t[x].w,t[y].w);if(L==R)return x;int mid=(L+R)/2;t[x].lson=merge(t[x].lson,t[y].lson,L,mid);t[x].rson=merge(t[x].rson,t[y].rson,mid+1,R);return x;}#undef ls#undef rs
}Tree;
void addl(int x,int y)
{a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;
}
void dfs(int x)
{int root=0;for(int i=ls[x];i;i=a[i].next){int y=a[i].to;dfs(y);root=Tree.merge(root,rt[y],1,n);}ans[x]=Tree.Ask(root,1,w[x],1,n)+1;Tree.Change(root,w[x],ans[x],1,n);rt[x]=root;
}
int main()
{scanf("%d",&n);for(int i=1;i<=n;i++){int x;scanf("%d",&x);if(i==1) continue;addl(x,i);}for(int i=1;i<=n;i++)scanf("%d",&w[i]);dfs(1);for(int i=1;i<=n;i++)printf("%d ",ans[i]);
}

jzoj3338-[NOI2013模拟]法法塔的奖励【权值线段树,线段树合并】相关推荐

  1. 【线段树】【FeyatCup】——2.法法塔的奖励

    首先感谢并膜拜两位大佬 wyl8899 & 法法塔 感谢两位的出题! 题目: 法法塔是很喜欢写程序的.所以冒着就算码农屌丝一辈子的风险也大无畏地写着程序. 码农们为了表彰法法塔的坚持与执着,决 ...

  2. “直接基于成本法”与“模拟权益法”两种合并报表模式比较与分析:响应新准则

    "直接基于成本法"与"模拟权益法"两种合并报表编制模式比较与分析 --对新准则的响应(一) 在编制合并财务报表时,存在两种模式,一种方法是直接基于成本法编制,一 ...

  3. 树的同构模板题(法1.最小表示法+法2.树哈希)

    树的同构 problem solution code solution code problem 模板题 solution Ⅰ. 最小表示法 将树转化为 0/10/10/1 括号序列:从根开始 dfs ...

  4. 227 用栈模拟汉诺塔问题

    原题网址:https://www.lintcode.com/problem/mock-hanoi-tower-by-stacks/description 描述 在经典的汉诺塔问题中,有 3 个塔和 N ...

  5. [原创]测试用例设计之场景法法

    [原创]测试用例设计之"场景法"法  场景法设计测试用例,主要用在于事件触发流程中,当某个事件触发然后就形成相应的场景流程,不同的事件触发,不同顺序和不同的处理结果,就形成一系列的 ...

  6. 基于层次分析法与熵权法的主客观组合赋权模型(原创:小青龙)

    基于层次分析法与熵权法的主客观组合赋权模型 组合赋权大家可以尝试进行改变,一个主观一个客观.(原创:小青龙) 简介 ​ 权重是用来衡量总体中各单位标志值在总体中作用大小的数值, 用来描述单因子在因子集 ...

  7. 浅析伪罗伯特法所构造的任意阶数伪二次幻方中某一任意位置权值的一般求法

    二次幻方(Magic Square)是一种每行.列和对角线上的数字和都相等的二维数组.构造二次幻方的方法有很多种,其中最著名的是罗伯特法,又称楼梯法,其核心是在奇数阶二次幻方的首行正中列填上1,随后下 ...

  8. critic法计算_基于CRITIC法和变异系数法的导线网测量平差定权 2

    基于 CRITIC 法和变异系数法的导线网测量平差定权 杨腾飞,施昆,汪奇生 ( 昆明理工大学 国土资源工程学院 , 云南 昆明 650093) [摘 要] CRITIC 与变异系数定权都是一种客观的 ...

  9. 权重设计:客观赋权法的说明(熵权法/变异系数法/CRCIII法/TOPSIS法)

    在数据分析中,我们经常会遇到多个特征对于结果造成不同影响的情况,如何识别这些特征各自的权重,对我们的后续结果评估,打分矩阵构建都具有重要意义.我们所说的赋权法是用于解决多指标综合评价问题中的各指标权重 ...

  10. 五子棋java程序=权值法_五子棋(人机对弈)——Java权值法五子棋博弈

    五子棋人机博弈 五子棋,人与人之间博弈,我们不用考虑太多,都是玩家自动思考. 但是如果我们要玩一个单机的五子棋,实现人机的对战,那么我就得"帮"电脑考虑下走哪步了. 实现的方法大概 ...

最新文章

  1. Hello World探究
  2. SQL Server中查询所有的表、视图、列和存储过程
  3. maven-assembly-plugin 和 maven-shade-plugin打包插件的区别
  4. 给Java初学者的十条小建议,快来收藏吧
  5. PyTorch基础-使用卷积神经网络CNN实现手写数据集识别-07
  6. C#使用linq查询大数据集的方法
  7. Wargame.kr_Web:already got
  8. python 艺术照片滤镜_使用Python创建自己的Instagram滤镜|视觉实战
  9. mysql中limit关键字_【JAVA】关于mysql的limit关键字使用。
  10. expr命令的一些用法
  11. ARM9 S3C2440 定时器中断
  12. oracle 12c sp2 0667,关于数据库安装的问题SP2-0667: Message file sp1.msb not found
  13. 3星|《未来公司》:Uber简史
  14. 操作系统 | 实验五 页面置换算法
  15. Java全栈开发---Java ERP系统开发:商业ERP(十三)CXF框架,物流BOS系统开发
  16. 小程序源码:全新实用工具证件照制作微信小程序源码下载支持多种证件生成与制作
  17. 中国高新技术企业名单数据
  18. html如何退出登录,微信小程序怎么退出登录
  19. STL剖析(二):容器底层数据结构及常见用法
  20. 东软、天健、金仕达、杭创、中联..HIS比较

热门文章

  1. 重力模型matlab代码,STK基础教程.doc
  2. java基础代码下载_Java基础(一)(示例代码)
  3. php 输入值,php-HTML输入值更改
  4. linux系统故障实验,Linux常见系统故障排除
  5. python socket自动重连_详解python3中socket套接字的编码问题解决
  6. future.cancel不能关闭线程_多线程与高并发笔记
  7. 360 屏蔽ajax,怎么在easy ui做全局Ajax拦截啊?
  8. 一张网页带你了解中秋节的前世今生
  9. m个苹果放入n个盘子问题
  10. mysql 剔除不可见字符_不可见字符,Excel里最隐蔽的坑