Codeforces 932D - Tree
思路:
树上倍增
anc[i][u]:u的2^i祖先
mx[i][u]:u到它的2^i祖先之间的最大值,不包括u
pre[i][u]:以u开始的递增序列的2^i祖先
sum[i][u]:以u开始递增序列从u到2^i祖先的和,不包括u
代码:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define mem(a,b) memset(a,b,sizeof(a)) const int N=4e5+;
const ll INF=1e15;
int anc[][N],pre[][N];
ll sum[][N],w[N],mx[][N];
int main(){
ios::sync_with_stdio(false);
cin.tie();
cout.tie();
int q,cnt=,op;
ll l,r,last=;
w[]=INF;
for(int i=;i<;i++)sum[i][]=sum[i][]=mx[i][]=mx[i][]=INF;
cin>>q;
while(q--){
cin>>op>>l>>r;
l^=last;
r^=last;
if(op==){
anc[][++cnt]=l;
w[cnt]=r;
mx[][cnt]=w[l];
for(int i=;i<;i++){
anc[i][cnt]=anc[i-][anc[i-][cnt]];
mx[i][cnt]=max(mx[i-][cnt],mx[i-][anc[i-][cnt]]);
}
int t=cnt;
for(int i=;i>=;i--){
if(mx[i][t]<w[cnt]){
t=anc[i][t];
}
}
pre[][cnt]=anc[][t];
sum[][cnt]=w[anc[][t]];
for(int i=;i<;i++){
pre[i][cnt]=pre[i-][pre[i-][cnt]];
sum[i][cnt]=sum[i-][cnt]+sum[i-][pre[i-][cnt]];
}
}
else{
int ans=;
if(w[l]<=r){
ans=;
r-=w[l];
for(int i=;i>=;i--){
if(sum[i][l]<=r){
r-=sum[i][l];
l=pre[i][l];
ans+=<<i;
}
}
}
last=ans;
cout<<ans<<endl;
}
}
return ;
}
Codeforces 932D - Tree的更多相关文章
- Tree CodeForces -932D
错误记录:如下注释语句 #include<cstdio> #include<algorithm> using namespace std; typedef long long ...
- Codeforces 675D Tree Construction Splay伸展树
链接:https://codeforces.com/problemset/problem/675/D 题意: 给一个二叉搜索树,一开始为空,不断插入数字,每次插入之后,询问他的父亲节点的权值 题解: ...
- Codeforces 570D TREE REQUESTS dfs序+树状数组 异或
http://codeforces.com/problemset/problem/570/D Tree Requests time limit per test 2 seconds memory li ...
- Codeforces 570D - Tree Requests【树形转线性,前缀和】
http://codeforces.com/contest/570/problem/D 给一棵有根树(50w个点)(指定根是1号节点),每个点上有一个小写字母,然后有最多50w个询问,每个询问给出x和 ...
- Codeforces 23E Tree
http://codeforces.com/problemset/problem/23/E 题意:给一个树,求砍断某些边,使得所有联通块大小的乘积最大.思路:f[i][j]代表当前把j个贡献给i的父亲 ...
- Codeforces 1092F Tree with Maximum Cost(树形DP)
题目链接:Tree with Maximum Cost 题意:给定一棵树,树上每个顶点都有属性值ai,树的边权为1,求$\sum\limits_{i = 1}^{n} dist(i, v) \cdot ...
- [Educational Round 17][Codeforces 762F. Tree nesting]
题目连接:678F - Lena and Queries 题目大意:给出两个树\(S,T\),问\(S\)中有多少连通子图与\(T\)同构.\(|S|\leq 1000,|T|\leq 12\) 题解 ...
- Codeforces 911F Tree Destruction
Tree Destruction 先把直径扣出来, 然后每个点都和直径的其中一端组合, 这样可以保证是最优的. #include<bits/stdc++.h> #define LL lon ...
- CodeForces 570D - Tree Requests - [DFS序+二分]
题目链接:https://codeforces.com/problemset/problem/570/D 题解: 这种题,基本上容易想到DFS序. 然后,我们如果再把所有节点分层存下来,那么显然可以根 ...
随机推荐
- c++ kafka 客户端rdkafka报Receive failed: Disconnected问题原因以及解决方法
%3|1538976114.812|FAIL|rdkafka#producer-1| [thrd:kafka-server:9092/bootstrap]: kafka-server:9092/0: ...
- 比beanutil更加灵活的dto转换工具dozer
准确的说,是因为pojo无法一招走天下或者说内外部隔离的原因,所以有些时候,不得不在两个bean之间做copy或者转换映射.对于直接性的属性拷贝beanutil以及能够满足大部分要求,但是如果遇到字段 ...
- mysql导入导出表
导入 source ***(路径+文件) 导出 mysqldump -uroot -plizhenghua 数据库名 表名 > 你要保存的sql文件(加位置)
- ProgressDemo
封装了下如下View滑动效果,类似网易的首页滑动效果. 详情见: https://github.com/VivienQin16/ProgressDemo
- iOS字体大小
1,iOS 字体大小单位是pt——磅. 英文字体的1磅,相当于1/72 英寸,约等于1/2.8mm. px:相对长度单位.像素(Pixel).(PS字体) pt:绝对长度单位.点(Point).(iO ...
- c和c++main函数的参数
1.代码 int main(int argc,char **argv[]) { ; } 2.分析 argc:代码参数个数 argv:二级指针,很多个字符串,这里代表参数列表 3.分析 这个代码最终被编 ...
- POJ 2387 Til the Cows Come Home 【最短路SPFA】
Til the Cows Come Home Description Bessie is out in the field and wants to get back to the barn to g ...
- FJUT 毒瘤3(二分 + 最大匹配)题解
毒瘤3 TimeLimit:1000MS MemoryLimit:256MB 64-bit integer IO format:%lld Problem Description 字节跳动有n款产 ...
- P5091 【模板】欧拉定理
思路 欧拉定理 当a与m互质时 \[ a^ {\phi (m)} \equiv 1 \ \ (mod\ m) \] 扩展欧拉定理 当a与m不互质且\(b\ge \phi(m)\)时, \[ a^b \ ...
- (zhuan) Attention in Long Short-Term Memory Recurrent Neural Networks
Attention in Long Short-Term Memory Recurrent Neural Networks by Jason Brownlee on June 30, 2017 in ...