首页 > 其他分享 >2024.9.6 近期练习

2024.9.6 近期练习

时间:2024-09-07 08:54:43浏览次数:13  
标签:rs 2024.9 练习 近期 min 端点 区间 我们 dp

P5044 [IOI2018] meetings 会议

对于 \(h_i\le 20\) 的数据,我们每个点维护单调栈,其代价为 \(x\) 的时候,取的位置是一个区间。
很显然已经有一个莫队算法,支持区间加,区间查询即可。然而不优。
其实单调栈与笛卡尔树是相似的,考虑建出笛卡尔树。
我们假设就对 \([l,r]\) dp,那么取出最大值,如果在左边取址,那么右边的贡献都是这个最大值。
右边取址同理,设 \(f_{u}\) 表示 \(u\) 子树内最小的代价,转移很容易。
具体地,把 \(u\) 左右儿子拿出来,取 \(\min(f_{ls}+A_u\times \min(siz_{rs},r-u),f_{rs}+A_u\times \min(siz_{rs},u-l))\).
转移方程里有 \(l,r\),非常难办。不妨把 \(l,r\) 放进状态里面。当我们找到 \(l,r\) 的 lca 时,从这里开始 dp。
这样的话,lca 下每个点都只有一侧是被 \(l,r\) 所限制的。
考虑怎么维护 \(f_{u,x},g_{u,x}\) 分别表示 \(l=x\),\(r=x\) 时的答案。同时设 \(h_u\) 表示原来的 \(f_u\).
\(f_{u,x}=\min(f_{ls,x}+A_u\times siz_{rs},h_{rs}+A_u\times (u-x))\)。\(g\) 同理。
这样,我们需要支持区间加等差数列的,还要有区间 checkmin 的线段树。
checkmin 是可以换成推平的,不难观察到 \(\min\) 中后者随 \(x\) 增加而减小,二分出其起效的位置,推平。

P10430 [JOISC 2024 Day1] 鱼 3

我们相当于选出一个 \(\sum k\) 最小的递增的 \(\{c_i-kD\}\) 数列。
由于对于固定左端点,右端点的答案是可以增量的维护出来的,所以我们递推右端点做扫描线。
对于加入的一个右端点,我们从后往前扫,使得前面都变成递增,这么做的话复杂度是 \(O(n^2)\)。
我们要考虑找性质进行优化。
不难发现,若一个位置减少,导致其前一个位置减少,那么他们以后都会一起减少。
我们可以用并查集把这些同时发生改变的并起来。然后接下来的处理用线段树维护区间和即可。

P2605 [ZJOI2010] 基站选址

你可以求出每个村庄被覆盖,哪些村庄放基站即可做到,那么这是一些区间。
然后我们再设计一个 dp,\(f_i\) 表示上一个是在 \(i\) 处放置的答案。
假设从 \(i\) 转移到 \(j\),那么我们可以知道上一个填 \(i\),区间填到了多少个。
对于左端点 \(\le j\) 且右端点 \(\ge j\) 的我们可以覆盖掉,右端点 \(\le j\) 的我们需要给补偿。
考虑用线段树维护 dp 过程,线段树维护每个 \(j\),从 \(j\) 转移的代价,转移取 \(\max\)。
考虑 dp 从 \(i-1\) 递推到 \(i\) 会发生什么。我们从此覆盖不了右端点为 \(i-1\) 的区间。
对于一个区间 \([l,i-1]\),那么若从 \([1,l]\) 转移,代价需要增加,所以区间加即可。

P9546 [湖北省选模拟 2023] 山路长环 / ring

我们先思考一个问题就是什么时候先手会必胜或必败。
先考虑链的情况。简化问题变为只有两条边,如果初始在边上两个点就是无论如何必败,中间必胜。
所以如果是三个边,分讨中间点和边上点的话,无论如何必胜;
如果四条边呢?如果在边上,第一个点和第三个点都是必败态,这与两条边形式相同,所以必败。
后面同理。所以我们得出,一条链的胜负态只与奇偶性有关。
如果是环呢?如何环的大小为奇数,那么先手直接断一条边就赢了;为偶数,谁先断边就输了。
那么双方的操作肯定都是把边减成 \(1\),直到存在一个 \(1\),就输了。
这个直接用线段树维护,秒了。

标签:rs,2024.9,练习,近期,min,端点,区间,我们,dp
From: https://www.cnblogs.com/Simon-Gao/p/18401288

相关文章

  • C++vector类相关OJ练习
    个人主页:C++忠实粉丝欢迎点赞......
  • MySql练习
            showdatabases;useexercise;select*fromemp_infoorderbyiddesc;--分页查询,这是sql中的方言--limit总是在sql语句中的最后--方言:不同的数据库对于同一个东西,有不同的实现--如果查询第一页,则起始索引的参数可以省略select*fromemp_info......
  • E31.【C语言】练习:指针运算习题集(上)
    Exercise1求下列代码的运行结果#include<stdio.h>intmain(){ inta[5]={1,2,3,4,5}; int*ptr=(int*)(&a+1); printf("%d",*(ptr-1)); return0;}答案速查:分析:Exercise2 求下列代码的运行结果//在x86环境下//假设结构体的大小是20个字节......
  • 字符数组练习题
    1、下列对 C语言字符数组的描述中错误的是( D ) A.字符数组可以存放字符串B.字符数组中的字符串可以整体输入、输出C.不可以用关系运算符对字符数组中的字符串进行比较D.可以在赋值语句中通过赋值运算符"="对字符数组整体赋值解析:D:不可以在赋值语句中通过赋......
  • [2024.9.6鲜花] 去码头整点热干面
    [2024.9.6鲜花]去码头整点热干面前情提要:写了几版了,都感觉太消沉了,于是写个奇怪的(?)写在开学前的鲜花,也许什么都聊,但主要聊这一个月来的破事吧相比于这段时间来说,\(NOI\)刚结束的那段时间,也就是七月底八月初的样子,反正是我状态最好的时候,各种意义上的状态我试图找出原因,......
  • java集合基础练习题
    List集合.ArrayList,LinkedList,Vector三者的相同点与不同点?(“Vector”可百度)【面试题】共同点:他们都实现了List接口,意味着他们具有相同的基本操作,如添加、删除、获取元素有序性和可重复性,他们都是有序的,即插入顺序和迭代顺序相同,都允许存储重复的元素都可以动态调整大......
  • 2024.9.6 模拟赛
    A对于一个子矩阵\((x_1,y_1),(x_2,y_2)\),其元素和为\(\sum_{i=x_1}^{x_2}\sum_{j=y_1}^{y_2}S_i\cdotS_j=(\sum_{i=x_1}^{x_2}S_i)(\sum_{j=y_1}^{y_2}S_j)\),\(O(n^2)\)枚举一下\(S\)的所有子区间的和放进一个桶里再检验一下即可。即对于一个子区间和为\(S_1\),需要累加和......
  • 2024.9.6 CF1307 模拟赛记录
    A:各捆干草间互相独立,所以优先移动距\(1\)近的。点击查看代码#include<bits/stdc++.h>#defineintlonglong#definepsbkpush_back#definefstfirst#definescdsecond#defineumapunordered_map#definepqueuepriority_queue#definevcvector#defineendl'\n'......
  • 2024.9.6 Python,华为笔试题总结,字符串格式化,字符串操作,广度优先搜索解决公司组织绩效
    1.字符串格式化name="Alice"age=30formatted_string="Name:{},Age:{}".format(name,age)print(formatted_string)或者name="Alice"age=30formatted_string=f"Name:{name},Age:{age}"print(formatted_string)2......
  • 数据结构练习题(java版)考前必备!
    今天我们刷一些栈队列的题目,大家还是先看题,后看题解。1.155.最小栈-力扣(LeetCode)思路:创建两个栈,一个栈所有元素都算,另一个栈只放小的元素,第二个栈中如果要放的元素比栈顶的元素小就放,这样我们直接pop第二个栈就能得到最小栈classMinStack{publicStack<Integer>......