博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces 932D - Tree
阅读量:6974 次
发布时间:2019-06-27

本文共 1171 字,大约阅读时间需要 3 分钟。

思路:

树上倍增

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
using namespace std;#define ll long long#define pb push_back#define mem(a,b) memset(a,b,sizeof(a))const int N=4e5+5;const ll INF=1e15;int anc[20][N],pre[20][N];ll sum[20][N],w[N],mx[20][N];int main(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int q,cnt=1,op; ll l,r,last=0; w[0]=INF; for(int i=0;i<20;i++)sum[i][1]=sum[i][0]=mx[i][1]=mx[i][0]=INF; cin>>q; while(q--){ cin>>op>>l>>r; l^=last; r^=last; if(op==1){ anc[0][++cnt]=l; w[cnt]=r; mx[0][cnt]=w[l]; for(int i=1;i<20;i++){ anc[i][cnt]=anc[i-1][anc[i-1][cnt]]; mx[i][cnt]=max(mx[i-1][cnt],mx[i-1][anc[i-1][cnt]]); } int t=cnt; for(int i=19;i>=0;i--){ if(mx[i][t]
=0;i--){ if(sum[i][l]<=r){ r-=sum[i][l]; l=pre[i][l]; ans+=1<

 

转载于:https://www.cnblogs.com/widsom/p/8496110.html

你可能感兴趣的文章
vue中eventbus 多次触发的问题
查看>>
两场CF
查看>>
Mahalanobis Distance(马氏距离)
查看>>
KVO和通知中心
查看>>
Master Nginx(1) - Installing Nginx and Third-Party Modules
查看>>
语义标签
查看>>
单向链表的有关操作(链式存储结构)
查看>>
string 转 int
查看>>
第四次团队会议
查看>>
spring的jar各包作用
查看>>
js获取上个月日期
查看>>
验证表单的两种方式:onSubmit和onClick
查看>>
【转载】外设使用Tips之MSCAN接收ID滤波器设置
查看>>
2^1000的各位数字和
查看>>
12.19站立会议
查看>>
5_find grep sed awk 详解
查看>>
JS 在web页面中调用本地应用程序
查看>>
asp.net 源码坊最新源码发布
查看>>
本学期学习计划
查看>>
python之内置函数,匿名函数
查看>>