首页 > 其他分享 >数据结构1系列题解前瞻

数据结构1系列题解前瞻

时间:2024-10-16 17:13:00浏览次数:1  
标签:分块 题解 线段 板子 算法 dp 数据结构 前瞻

A. 线段树分裂

算法:线段树、(平衡树?)

板子题,不多做评价。但是开发空间很大,我的写法在洛谷题解上没找到,导致当时想贺题解没贺成。

B. 三元上升子序列

算法:线段树、树状数组、分块、(CDQ分治?)

二维偏序板子,开发空间极大,想怎么写就怎么写。

C. STEP

算法:线段树、分块

线段树维护子区间信息板子,类比山海经,由于时限不严,分块也可写。

D. 普通平衡树(数据加强版)

算法:平衡树

平衡树板子,Coner Case较多,比如找完前驱要Splay一下。数据加强可以更好检验算法的正确性。

E. Grass Planting G

算法:树链剖分+线段树

算是树剖板子了吧,由于树剖维护的是点信息,所以需要边权转点权。注意询问的两个点一定相邻。

F. 轻重边

算法:树链剖分+线段树

树剖还是板子,但是线段树维护比较复杂。边权转点权这步不变,对于不同次的重边染上不同的颜色,合并时如果两个儿子的合并边界颜色不同则证明中间有条边是“重转轻”,减去答案即可。

G. Promotion Counting P

算法:dfs+线段树合并(+离散化?)

线段树合并板子题,对每一个点开一个权值线段树,对于父亲节点直接把儿子的线段树合并过来即可,需要动态开点,可以不离散化和回收节点。

H. History

算法:主席树、操作树+线段树

比较离谱的trick。正常树剖是在dfs序上开线段树,本题需要在bfs序上开线段树,由于同一深度的节点bfs差越大距离越远,有单调性,可以二分找到查询的答案。注意二分这里有不少Coner Case,比较难调。回溯用主席树或操作树都行。

J. Physical Education Lessons

算法:线段树+离散化、线段树+动态开点、珂朵莉树、(分块+离散化?)

注意到区间赋值,于是想到珂朵莉树,所以这题就成了珂朵莉树板子。注意由于CF大佬的Hack,答案需要在修改时预处理出来,以达到 \(O(1)\) 的查询复杂度。当然,这种题目理论上线段树和分块写写也能过,但是不如珂朵莉树好写。

W. 基站选址

算法:动态规划+线段树

线段树优化dp,尝试设计状态,设 \(dp[i][j]\) 表示考虑了前 \(i\) 个村庄已经放了 \(j\) 个基站且这个位置放基站的最小花费,则有 \(dp[i][j]=min(dp[k][j-1]+calc(k,i)),k\in[1,i-1]\)。由于有取min且转移和 \(i\) 的位置有关,考虑使用线段树优化,把 \(calc(k,i)\) 拆开,对一个位置预处理能覆盖它的第一个和最后一个村庄,然后根据 \(i\) 判断修改和查询的区间。注意dp数组存的不是最终答案,另外还要把 \(j\) 提到第一层循环。

标签:分块,题解,线段,板子,算法,dp,数据结构,前瞻
From: https://www.cnblogs.com/ywhhdjser-97/p/18469051

相关文章

  • P1941 NOIP2014 提高组 飞扬的小鸟 题解
    P1941NOIP2014提高组飞扬的小鸟分析背包经典演变问题玩得挺花。设\(f[i][j]\)表示到达\((i,j)\)的时候的最小点击次数。题目中对于每一个\(i\)有两种处理:点击与不点击(重点:点击可以叠加)。所以,对于点击,我们可以像完全背包一样转移,而不点击就按照01背包转移。对于管......
  • [NOI2020] 美食家 题解
    属于是将矩阵快速幂的绝大部分技巧用到了极致的一道题。暴力部分首先我们先考虑一个普通DP。定义\(dp_{t,i}\)表示在时间为\(t\)时到达点\(i\)可以得到的愉悦值之和的最大值。显然有\((i,j)\inE\todp_{t+w,j}=\max(dp_{t,i}+c_j)\)。特判一下当前节点有美食节的情......
  • 【数据结构】时间、空间复杂度详解
    大家有没有遇到过,为什么有些程序跑得飞快,而有些程序却慢得让人抓狂?我们可能都是这样认为的:他写的程序效率高等等,确实如此。但这背后隐藏着两个重要的概念:时间复杂度和空间复杂度。它们就像程序的“效率指标”,帮助我们评估程序的性能。一、时间复杂度:衡量速度的尺子简单来说,时......
  • 【数据结构】自己动手写一个C++链表功能
    链表数据结构在操作数据时具有更高的性能,但同时因为其结构的原因会造成时间复杂度为O(N),因此理解链表结构的底层实现能够让我们在开发中对程序的性能进行进一步优化。如果你不知道什么是链表或者时间复杂度,可以参考我另外两篇文章:【数据结构】数组、链表、堆栈、队列到......
  • 洛谷 P5175 数列 题解
    纯纯数学题。看到\(n\le10^{18}\)不难想到矩乘,但是\(\log_210^{18}\approx60\),再加上\(T=30000\)的多测,运算量已经来到了\(1.8\times10^6\),所以我们最多有一个\(\sqrt[3]{\frac{1.5\times10^8}{6\times10^6}}\approx4\)的矩阵。\[\becausea_i=xa_{i-1}+ya_{......
  • Project Euler 588 题解
    这玩意好像甚至有递推式……不太懂(为什么是图片?cnblogs第一个公式没渲染成功)时间复杂度是\(O(4^{\degF}\logK)\)的。#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongconstintmaxn=100;intf[17][maxn],cur[10],al[4];intcalc(intK){ //cer......
  • 数据结构--顺序表
    简介:这是顺序表的数据结构以C/C++语言实现,编译器为VS2022,如有不对的地方欢迎大家在评论区里讨论在其中我们要用到如下头文件:#include"stdio.h"#include"stdlib.h"简单宏定义一些类型,宏定义的内容可以根据自身需求进行更换:#defineMaxsize50 //静态顺序表的最大长度#def......
  • 题解:[SNCPC2019] Pick Up
    ProblemLink[SNCPC2019]PickUp题意给出甲的坐标和速度,乙的坐标和速度,商场的坐标,可以让乙去接甲,求甲前往商场的最短用时。Solution分类讨论。思考乙是否要去接甲。这个很简单,令\(ans1\)为甲自己出发耗时,\(ans2\)为乙接甲耗时,两者取最小值即可。\(ans1\)很好算,那么\(......
  • P3794 签到题IV 题解
    题目传送门前置知识最大公约数解法\(\gcd\)和\(\operatorname{or}\)在固定左端点的情况下至多会变化\(O(\logV)\)次。以\(\gcd\)为例,考虑求出所有的四元组\((l,r,x,val)\)表示\(\foralli\in[l,r],\gcd\limits_{j=i}^{x}\{a_{j}\}=val\)。本题中因为\(x\)......
  • G-数据结构-G
    \[\huge近日多做数据结构题,或恐后再读不能醒悟,或记其思路,或骂出题人,或不想刷题,虽有此篇。\]\[\]\[\]\[\]\[\]T1距离首先这题部分分很多,直接$O(n^2)$枚举点对,在树上差分即可获得70分。那么正解几乎和部分分就没什么关系了。首先看到\[ans_u=\sum_{x∈subtree_......