在线更新问题 HDU5877 线段树
题目大意:给你一棵树,有n-1条边,每条边都有方向,每个顶点有权值,给出weak pair的定义是val[u]*val[v] <=k,u是v的祖先,问有多少对这样的顶点
思路:创建线段树,通过dfs动态创建,每次都不断更新。因为我们只能是根节点开始往下的,所以我们遍历到兄弟节点的之前要把其他的兄弟节点的信息给删除掉。(这就和用vis标记一样的,一会儿变为true,一会儿变为false)
不过我很奇怪,为啥我的代码没有吧k/a[i]放进去就迷之RE了
当然,这道题也可以用主席树做,也可以用treap做
//看看会不会爆int!数组会不会少了一维!
//取物问题一定要小心先手胜利的条件
#include <bits/stdc++.h>
using namespace std;
#define LL long long
#define ALL(a) a.begin(), a.end()
#define pb push_back
#define mk make_pair
#define fi first
#define se second
const int maxn = 4e5 + ;
LL a[maxn], b[maxn], d[maxn], tree[maxn * ];
LL n, m, k, lenb, ans;
vector<int> E[maxn]; int query(int o, int l, int r, int ql, int qr){
if (l >= ql && r <= qr){
return tree[o];
}
int cnt = ;
int mid = (l + r) / ;
if (ql <= mid) cnt += query(o << , l, mid, ql, qr);
if (qr > mid) cnt += query(o << | , mid + , r, ql, qr);
return cnt;
} inline void push_up(int o){
int lb = o << , rb = o << | ;
tree[o] = tree[lb] + tree[rb];
} void update (int o, int l, int r, int pos, int val){
if (l == r && l == pos) {
tree[o] += val;
return ;
}
int mid = (l + r) / ;
if (pos <= mid) update(o << , l, mid, pos, val);
if (pos > mid) update(o << | , mid + , r, pos, val);
push_up(o);
} void dfs(int u){
int pos = lower_bound(b + , b + + m, a[u]) - b;
int posk = lower_bound(b + , b + + m, k / a[u]) - b;
ans += query(, , lenb, , posk);
int len = E[u].size();
update(, , lenb, pos, );
for (int i = ; i < len; i++){
int v = E[u][i];
dfs(v);
}
update(, , lenb, pos, -);
} int main(){
int t; cin >> t;
while (t--){
memset(d, , sizeof(d));
memset(tree, , sizeof(tree));
scanf("%I64d%I64d", &n, &k);
for (int i = ; i <= n; i++){
scanf("%I64d", a + i);
b[i] = a[i];
E[i].clear();
}
m = n;
for (int i = ; i <= n; i++) b[++m] = k / a[i]; sort(b + , b + + m);
lenb = unique(b + , b + + m) - b - ;///序列长度1~n
///printf("lenb = %d\n", lenb);
for (int i = ; i <= n - ; i++){
int u, v; scanf("%d%d", &u, &v);
E[u].pb(v);
d[v]++;
}
ans = ;
for (int i = ; i <= n; i++){
if (d[i] == ){
dfs(i);
break;
}
}
printf("%I64d\n", ans);
}
return ;
}
在线更新问题 HDU5877 线段树的更多相关文章
- HDU5877 Weak Pair dfs + 线段树/树状数组 + 离散化
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5877 题意: weak pair的要求: 1.u是v的祖先(注意不一定是父亲) 2.val[u]*va ...
- bzoj3932--可持久化线段树
题目大意: 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第 ...
- codevs 1082 线段树练习 3(区间维护)
codevs 1082 线段树练习 3 时间限制: 3 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...
- codevs 1576 最长上升子序列的线段树优化
题目:codevs 1576 最长严格上升子序列 链接:http://codevs.cn/problem/1576/ 优化的地方是 1到i-1 中最大的 f[j]值,并且A[j]<A[i] .根 ...
- codevs 1080 线段树点修改
先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...
- codevs 1082 线段树区间求和
codevs 1082 线段树练习3 链接:http://codevs.cn/problem/1082/ sumv是维护求和的线段树,addv是标记这歌节点所在区间还需要加上的值. 我的线段树写法在运 ...
- PYOJ 44. 【HNSDFZ2016 #6】可持久化线段树
#44. [HNSDFZ2016 #6]可持久化线段树 统计 描述 提交 自定义测试 题目描述 现有一序列 AA.您需要写一棵可持久化线段树,以实现如下操作: A v p x:对于版本v的序列,给 A ...
- CF719E(线段树+矩阵快速幂)
题意:给你一个数列a,a[i]表示斐波那契数列的下标为a[i],求区间对应斐波那契数列数字的和,还要求能够维护对区间内所有下标加d的操作 分析:线段树 线段树的每个节点表示(f[i],f[i-1])这 ...
- 【BZOJ-3779】重组病毒 LinkCutTree + 线段树 + DFS序
3779: 重组病毒 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 224 Solved: 95[Submit][Status][Discuss] ...
随机推荐
- 《实战Java高并发程序设计》pdf
花了我五元大洋,需要的拿去吧.百度云盘:https://pan.baidu.com/s/1o8bESY2
- php 关了浏览器也可以自动运行脚本
<?php ignore_user_abort(); //即使Client断开(如关掉浏览器),PHP脚本也可以继续执行. set_time_limit(0); //执行时间为无限制,php默认 ...
- IntelliJ Idea 常用快捷键列表(转)
IntelliJ Idea 常用快捷键列表 Alt+回车 导入包,自动修正Ctrl+N 查找类Ctrl+Shift+N 查找文件Ctrl+Alt+L 格式化代码 Ctrl+Alt+O 优化导 ...
- java并发编程框架 Executor ExecutorService invokeall
首先介绍两个重要的接口,Executor和ExecutorService,定义如下: public interface Executor { void execute(Runnable command ...
- HDU 5828 Rikka with Sequence
好久没写线段树了,这题作为一个回味.. 第一种操作的话,就是一个延迟标记. 第二种操作可以暴力更新下去,但是有一个优化,如果某区间内所有值都是一样的,或者最大值和最小值相差1,那么到此结束,不要继续往 ...
- WebViewJavascriptBridge详细使用
前言 WebViewJavascriptBridge是支持到iOS6之前的版本的,用于支持native的iOS与javascript交互.如果需要支持到iOS6之前的app,使用它是很不错的.本篇讲讲 ...
- $.getjson方法配合在url上传递jsoncallback=?参数,实现跨域获取指定网站某商品访问量
across.php文件在域名www.cms.com程序中 <html><body><div id="pv">99</div>< ...
- iptables-1.4.19 移植到linux
------------------------------------------------------------------------------------------ https://g ...
- 禁止root远程登录 sshd问题:A protocol error occurred. Change of username or service not allowed
在研究Linux安全的时候遇到一个问题,原本打算修改linux直接远程root登陆,修改为sshd的配置文件后 Nano /etc/ssh/sshd_config 把#PermitRootLogin ...
- hibernate ——helloWorld程序(XML配置)
1.项目结构 2.hibernate实现了Java类 和 数据库表的映射(Map) 先看一下Student的Java类和对应的数据库表 package com.pt.hibernate; public ...