当前位置: 首页 > news >正文

Codeforces932D. Tree

n<=400000个在线操作:树上插入一个某点权、父亲为某点的点;查询这样的最长点序列:序列的某个数必须是上一个数的祖先之一;序列的点权和不能超过x;序列的某个点的点权必须不小于上一个,且相邻两个点之间不存在点权大于等于深度大的那个点的点权的点。

说白了,就是每个点找他祖先中第一个点权大于等于他的点,然后建一棵假的树,树边表示某点如果要构造序列,序列的下一个数字就是他祖先。

分别处理:原树父亲、祖先点权最大值、假的树的父亲、假的树的祖先点权和,四个st表一个推一个即可。

 1 //#include<iostream>
 2 #include<cstring>
 3 #include<cstdlib>
 4 #include<cstdio>
 5 //#include<map>
 6 #include<math.h>
 7 //#include<time.h>
 8 //#include<complex>
 9 #include<algorithm>
10 using namespace std;
11 
12 int n;
13 #define maxn 400011
14 #define LL long long
15 LL fa[maxn][22],val[maxn],M[maxn][22],pp[maxn][22],sum[maxn][22],tot=1;
16 
17 int main()
18 {
19     scanf("%d",&n);
20     int last=0; LL x,y,z;
21     for (int i=1;i<=n;i++)
22     {
23         scanf("%lld%lld%lld",&x,&y,&z); y^=last; z^=last;
24         if (x==1)
25         {
26             val[++tot]=z;
27             fa[tot][0]=y; for (int i=1;i<=20;i++) fa[tot][i]=fa[fa[tot][i-1]][i-1];
28             M[tot][0]=max(val[y],z); for (int i=1;i<=20;i++) M[tot][i]=max(M[tot][i-1],M[fa[tot][i-1]][i-1]);
29             if (val[y]>=z) pp[tot][0]=y;
30             else
31             {
32                 int t=y; for (int i=20;i>=0;i--) if (fa[t][i] && M[t][i]<z) t=fa[t][i]; t=fa[t][0];
33                 pp[tot][0]=t;
34             }
35             for (int i=1;i<=20;i++) pp[tot][i]=pp[pp[tot][i-1]][i-1];
36             sum[tot][0]=val[tot]+val[pp[tot][0]];
37             for (int i=1;i<=20;i++) sum[tot][i]=sum[tot][i-1]+sum[pp[tot][i-1]][i-1]-val[pp[tot][i-1]];
38         }
39         else
40         {
41             if (val[y]>z) {printf("%d\n",(last=0)); continue;}
42             int t=y,ans=1; for (int i=20;i>=0;i--) if (pp[t][i] && sum[t][i]<=z) ans+=(1<<i),z-=sum[t][i]-val[pp[t][i]],t=pp[t][i];
43             printf("%d\n",(last=ans));
44         }
45     }
46     return 0;
47 }
View Code

 

转载于:https://www.cnblogs.com/Blue233333/p/8485929.html

相关文章:

  • ASP.NET CORE RAZOR :将文件上传至 ASP.NET Core 中的 Razor 页面
  • No packages marked for update
  • MySQL之单表查询
  • linux 下查看一个进程执行路径
  • 字符串匹配 扩展KMP BMSunday
  • linux系统下配置Django虚拟环境的一些总结
  • pwntools 文档学习
  • Notes 20180308 : 语句
  • 软件工程阅读笔记一
  • Servlet中forward和redirect的区别(转)
  • (1)常见O(n^2)排序算法解析
  • 性能测试---不同视角看性能和相关术语
  • java ee5的新特性
  • [LuoguP1141]01迷宫
  • webpack学习笔记1
  • Angularjs之国际化
  • C# 免费离线人脸识别 2.0 Demo
  • ES6 ...操作符
  • httpie使用详解
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • Python学习笔记 字符串拼接
  • Yii源码解读-服务定位器(Service Locator)
  • 从零开始学习部署
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 前端_面试
  • 使用API自动生成工具优化前端工作流
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • ​MySQL主从复制一致性检测
  • ​人工智能书单(数学基础篇)
  • #etcd#安装时出错
  • (11)MSP430F5529 定时器B
  • (12)Hive调优——count distinct去重优化
  • (Java)【深基9.例1】选举学生会
  • (补)B+树一些思想
  • (十五)使用Nexus创建Maven私服
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .NET6 开发一个检查某些状态持续多长时间的类
  • .Net7 环境安装配置
  • @EnableAsync和@Async开始异步任务支持
  • [ C++ ] 继承
  • [ vulhub漏洞复现篇 ] Apache APISIX 默认密钥漏洞 CVE-2020-13945
  • [100天算法】-二叉树剪枝(day 48)
  • [1525]字符统计2 (哈希)SDUT
  • [2015][note]基于薄向列液晶层的可调谐THz fishnet超材料快速开关——
  • [20190113]四校联考
  • [2024最新教程]地表最强AGI:Claude 3注册账号/登录账号/访问方法,小白教程包教包会
  • [AIGC 大数据基础]hive浅谈
  • [Contest20180313]灵大会议
  • [ES-5.6.12] x-pack ssl
  • [hdu 2826] The troubles of lmy [简单计算几何 - 相似]