C240817D. 模拟赛:树上dp(以i为起点)+set操作
比较显然的树上dp, 但是维护set比较烦
考场上其实自己是定义 \(f[i]\) 是以 \(i\) 结尾, 然后这样的话单次更新根本做不到 \(O(logN)\).
反应实在是太迟钝了,考场想“如果有一种只更新一条链的dp就好了”
结果完全没想到只需变成以 \(i\) 开头就行了.
积累经验吧。不要气馁。
#include<bits/stdc++.h>
#define F(i,l,r) for(int i(l);i<=r;++i)
#define G(i,r,l) for(int i(r);i>=l;--i)
#define int ll
using namespace std;
using ll = long long;
const int N = 1e6+5,ninf = -0x3f3f3f3f3f3f3f3f;
int n,f[N]; //f[i]:以 i 为开头的答案
multiset<int,greater<int>> tr[N];
void insert(int x,int val){
if(tr[x].size() && *tr[x].begin() >= val){
tr[x].emplace(val);
return ;
} tr[x].emplace(val);
while(x){
if(tr[x].empty()) return ;
int tmp;
if(x*2<1000000) tmp = max(f[x*2], f[x*2+1]) + *tr[x].begin();
else tmp = *tr[x].begin();
if(tmp<=f[x]) return;
if(f[x] != 0) tr[0].erase(f[x]);
f[x] = max(0ll,tmp);
if(f[x] != 0) tr[0].insert(f[x]);
x>>=1;
}
}
void del(int x,int val){
if(tr[x].size() && *tr[x].begin() != val){
tr[x].erase(val);
return ;
} tr[x].erase(val);
while(x){
if(tr[x].empty()){
if(f[x] != 0) tr[0].erase(f[x]);
f[x] = 0;
}
else{
int tmp;
if(x*2>1000000) tmp = *tr[x].begin();
else tmp = max(f[x*2], f[x*2+1]) + *tr[x].begin();
if(tmp == f[x]) return ;
if(f[x] != 0) tr[0].erase(f[x]);
f[x] = max(0ll,tmp);
if(f[x]!=0) tr[0].insert(f[x]);
}x>>=1;
}
}
signed main(){
// freopen("prob.in","r",stdin);freopen("prob.out","w",stdout);
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin>>n;
tr[0].emplace(0);
while(n--){
int op,p,b;
cin>>op>>p>>b;
if(op==1) insert(p,b);
else del(p,b);
cout<<*tr[0].begin()<<"\n";
}
return 0;
}
/*
T
n,m,k,st
u,v,w
think twice, code once.
check your code:
array memory
testing sentence
*/
C240817D. 模拟赛:树上dp(以i为起点)+set操作的更多相关文章
- [10.18模拟赛] 序列 (DP)
[10.18模拟赛] 序列 题目描述 山山有一个整数序列s1,s2,-,sn,其中1≤si≤k. 求出有多少个准确移除m个元素后不同的序列.答案模(1e9+7) 输入 输入包括几个测试用例,并且由文件 ...
- 模拟赛20181016 dp
给出1-n的序列插入一个bst: 给出T组询问,包含n,h分别代表点数为n,高度为h的树,求所有插入顺序的合法方案数,模1e9+7 样例输入 1 2 1 样例输出 2 #include<bit ...
- [8.16模拟赛] 玩具 (dp/字符串)
题目描述 儿时的玩具总是使我们留恋,当小皮还是个孩子的时候,对玩具更是情有独钟.小皮是一个兴趣爱好相当广泛且不专一的人,这这让老皮非常地烦恼.也就是说,小皮在不同时刻所想玩的玩具总是会不同,而有心的老 ...
- 放棋游戏(NOIP模拟赛)(DP)
没有原题... 囧.. [问题描述] 游戏规则是这样,有n(1<=n<=100)行格子,第一行由n个格子,第二行有n-1个格子,第三行由n-2个格子,……以此类推,第n行有1个格子.要求再 ...
- 98: 模拟赛-神光 dp
$code$ #include <cstdio> #include <cstring> #include <algorithm> using namespace s ...
- NOIp模拟赛 现实(DP 拓扑)
题目来源:by lzz \(Description\) 给定一张有向图,求对于哪些点,删除它和它的所有连边后,图没有环. \(n\leq 5\times10^5,m\leq 10^6\). \(Sol ...
- 83: 模拟赛 树形dp
$des$ $sol$ 维护每个点的子树中的信息以及非子树的信息 $code$ #include <bits/stdc++.h> using namespace std; #define ...
- 7.1 NOI模拟赛 计数问题 dp
还是可以想出来的题目 不过考场上没有想出来 要 引以为戒. 初看觉得有点不可做 10分给到了爆搜. 考虑第一个特殊情况 B排列为1~m. 容易发现A排列中前m个数字 他们之间不能产生交换 且 第k个数 ...
- CH Round #52 - Thinking Bear #1 (NOIP模拟赛)
A.拆地毯 题目:http://www.contesthunter.org/contest/CH%20Round%20%2352%20-%20Thinking%20Bear%20%231%20(NOI ...
- 【2019.8.6 慈溪模拟赛 T3】集合(set)(线段树上DP)
线段树上\(DP\) 首先发现,每个数肯定是向自己的前驱或后继连边的. 则我们开一棵权值线段树,其中每一个节点记录一个\(f_{0/1,0/1}\),表示在这个区间左.右端点是否连过边的情况下,使这个 ...
随机推荐
- mongodb 中嵌套数组的且查询
如果在mongodb中存在如下数据 { audit:{ experts:[{expertId:"1",result:"success",......} {exp ...
- 如何切换git的HEAD分支
git remote set-head origin some_branch
- B2B进销存ERP后台管理系统的逻辑架构与设计,AxureRP原型产品经理实战案例
模块分析: 进销存系统是一种用于企业管理库存.销售和采购活动的信息系统.它的主要作用包括但不限于以下几个方面: 1.库存管理 实时库存跟踪:准确记录每种商品的库存数量,确保数据的实时性和准确性. 库存 ...
- Android Camera2Video整合到自己项目里
背景: Android项目里调用摄像头拍摄视频,原本使用的 MediaStore.ACTION_VIDEO_CAPTURE, 后来因项目需要,改成了camera2 1.Camera2Video 官方d ...
- JDK有用的新特性-Java Record
目录 Java Record Record使用 Instance Methods 静态方法 Static Method Record 的构造方法 step1: 紧凑和定制构造方法 Record 与 与 ...
- 解决auditwheel repair过程rpath被修改的问题
问题背景 AuditWheel是一个用于修复Python的whl包的工具,例如在这个CyFES开源库中,因为使用到了Cython和CUDA编译动态链接库的技术,方便Python调用.但是在编译CUDA ...
- windows server 2019 IIS网站属性上没有asp.net标签 ,aspnet_regiis -i 不能安装
在新的服务器版本已经不能通过 aspnet_regiis -i安装了,可以通过以下语句完成: dism /online /enable-feature /featurename:IIS-ASPNET4 ...
- pyspark 数据类型及转换
spark 有哪些数据类型 https://spark.apache.org/docs/latest/sql-reference.html Spark 数据类型 Data Types Spark SQ ...
- 在stable diffussion中完美修复AI图片
无论您的提示和模型有多好,一次性获得完美图像的情况很少见. 修复小缺陷的不可或缺的方法是图像修复(inpainting).在这篇文章中,我将通过一些基本示例来介绍如何使用图像修复来修复缺陷. 需要的软 ...
- TS中简单实现一下依赖注入
依赖注入(Dependency Injection,DI)是一种设计模式,主要用于实现控制反转(Inversion of Control,IoC).它通过将对象的依赖关系从内部管理转移到外部容器来解耦 ...