Codeforces893F_Subtree Minimum Query】的更多相关文章

题意 给定一棵树和根,每个点有点权,强制在线询问\(x\)子树里离\(x\)距离不超过\(k\)的最小点权. 分析 权值线段树合并的套路题,dfs,以深度作为下标,点权作为值,对每个点建立一颗权值线段树,然后回溯的时候合并到父节点的线段树上. 合并时维护最小值,查询时也是查询区间最小值. 内存给得多的情况下数组往死里开,不要白白送一发RE. 代码 #include <bits/stdc++.h> using namespace std; const int N=6e5+50; const in…
Range Minimum Query (RMQ) Write a program which manipulates a sequence A = {a0,a1,...,an−1} with the following operations: find(s,t): report the mimimum element in as,as+1,...,at. update(i,x): change ai to x. Note that the initial values of ai (i=0,1…
作者:danielp 出处:http://community.topcoder.com/tc?module=Static&d1=tutorials&d2=lowestCommonAncestor Introduction  Notations  Range Minimum Query (RMQ)      Trivial algorithms for RMQ      A <O(N), O(sqrt(N))> solution      Sparse Table (ST) al…
893F - Subtree Minimum Query 题意 给出一棵树,每次询问 \(x\) \(k\),求以 \(x\) 为根结点的子树中的结点到结点 \(x\) 的距离小于等于 \(k\) 的结点权值最小值. 分析 可持久化线段树,对每个结点都建树,然后尽可能复用子孙结点的线段树. 对于一般的线段树,我们并不需要记录左右子结点的标号,因为如果当前节点标号为 \(rt\) ,则左右子结点标号为 \(2 * rt\) 和 \(2 * rt + 1\) .对于本题,若有 \(u\) 是 \(v…
[cf contest 893(edu round 33)] F - Subtree Minimum Query time limit per test 6 seconds memory limit per test 512 megabytes input standard input output standard output You are given a rooted tree consisting of n vertices. Each vertex has a number writ…
CF893F Subtree Minimum Query 输入输出格式 输入格式: The first line contains two integers \(n\) and \(r\) ( \(1<=r<=n<=100000\) ) - the number of vertices in the tree and the index of the root, respectively. The second line contains n integers \(a_{1},a_{2}…
Description: 给定一棵树,每次询问某点子树中到其不超过k的所有点的最小点权 强制在线 Hint: \(n,m\le 10^5\) Solution: 看到题目第一反应是以深度为下标,dfs序为版本建树 然而不行,因为min不满足前缀可减 所以我们换过来,每个\(dep\)建树表示\(<=dep\)所有点的权值 在上面直接查x子树的min就好了 貌似这题用线段树合并就是SBT...... #include <map> #include <set> #include…
题意 给定一棵 \(n\) 个点的带点权树,以 \(1\) 为根, \(m\) 次询问,每次询问给出两个值 \(p, k\) ,求以下值: \(p\) 的子树中距离 \(p \le k\) 的所有点权最小值,询问强制在线. \(n \le 10^5 , m \le 10^6, TL = 6s\) 题解 如果不强制在线,直接线段树合并就做完了. 强制在线,不难想到用一些可持久化的结构来维护这些东西. 其实可以类似线段树合并那样考虑,也就是说每次合并的时候我们依然使用儿子的信息. 只要在合并 \(x…
题目链接:https://cn.vjudge.net/problem/CodeForces-893F 题目大意:给你n个点,每一个点有权值,然后这n个点会构成一棵树,边权为1.然后有q次询问,每一次询问包括t1和t2.让你找出以t1为根节点的树上,距离t1不超过t2的节点,最小的点权值. 每一次的t1是(上次询问的结果+t1)%n+1,t2是(上次询问的结果+t1).所以就必须的强制在线了. 具体思路:线段树合并,通过dfs序进行遍历,以每一个点的深度作为下标建树.一开始,每一个节点储存的是从当…
传送门 线段树合并菜题. 题意简述:给一棵带点权的有根树,多次询问某个点ppp子树内距离ppp不超过kkk的点的点权最小值,强制在线. 思路: 当然可以用dfsdfsdfs序+主席树水过去. 然而线段树合并也是一个不错&&好写的思路 我们按照深度为下标建立权值线段树然后线段树合并预处理一波. 查询就转化成区间查询了. 注意因为要保存下每一个子树的信息所以合并的时候要新建节点来储存信息. 代码: #include<bits/stdc++.h> #define ri registe…