首页 > 其他分享 >一些数据结构维护手法,好题

一些数据结构维护手法,好题

时间:2024-04-05 16:55:05浏览次数:29  
标签:pre 26 线段 好题 手法 区间 维护 数据结构 字母

一些数据结构维护手法,好题

[蓝桥杯 2022 国 AC] 替换字符

发现字母的变换有复合性质,可以用线段树维护一个 \(lazy[26]\) 数组表示这个区间的每一个字母变成了那一个。

当两个标记合并的时候有:\(nwlazy[i]=blazy[alazy[i]]\),相当于标记信息的复合。


One Occurrence

对于这种某个数只出现一次的经典题,考虑一个经典的 trick,我们维护一个 \(pre[i]\) 表示 \(a_i\) 上一次出现的位置,然后 \(suf[i]\) 表示 \(a_i\) 下一次出现的位置。

我们发现若 \(a_i\) 在区间 \([l,r]\) 中只出现了一次 \(\iff pre[i]<l \ or\ suf[i]>r\)。

我们发现这样我们不好处理,因为多了个 \(suf\) 的情况,我们不难想到如果能固定 \(r\),是不是问题就好解决了。

利用扫描线思想,我们把询问离线下来,扫 \(r\), 然后去维护 \(l\) 的答案。

我们用一个线段树,维护区间 \(pre[i]\) 的最小值。

对于扫到某个位置 \(r\),我们把 \(r\) 这个位置在线段树中的值改为 \(pre[r]\),然后注意此时还要把 \(pre[r]\) 位置的值改为 \(INF\),因为此时如果 \(pre[r]\) 位置的数的 \(pre\) 是满足条件的,但又因为在 \(r\) 处还出现了一次,所以此时他在所有以 \(r\) 为右端点的询问中,一定是不合法的,所以我们要改为 \(INF\)。


A Simple Task

题目要求我们对区间的所有字母排序(升序或者降序),我们不难发现其实本质就是按 \(26\) 个字母的顺序依次给区间赋值。

每次区间修改就是遍历 \(26\) 个字母,在其对应的线段树上修改。

所以我们可以用线段树维护每种字母的出现次数。

故我们开 \(26\) 个线段树,每颗线段树维护对应字母的出现次数,然后支持区间赋值即可。

标签:pre,26,线段,好题,手法,区间,维护,数据结构,字母
From: https://www.cnblogs.com/xiaole-jackle/p/18115907

相关文章

  • 堆火熠熠:燃烧吧,我们的数据结构之魂
    “堆蕴秩序:堆排序的诗篇与画卷”前置知识简要:堆堆(heap)是一种满足特定条件的完全二叉树,主要可分为两种类型,如图8-1所示。小顶堆(minheap):任意节点的值其子节点的值。大顶堆(maxheap):任意节点的值其子节点的值。`/*初始化堆*///初始化小顶堆priority_queue<int,......
  • 数据结构(顺序表)
    一.顺序表的概念及结构线性表顺序表是线性表的一种。线性表(linear list)是n个具有相同特性的数据元素的有限序列。线性表是⼀种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理......
  • 3数据结构
    p'数据结构57-659分数据结构+算法时间复杂度加法规则多项相加,保留高阶项,系数化为1(最高阶太大了,其余的可以忽略不计),系数化为1。乘法规则多项相乘,都保留,并将系数化为1时间复杂度实例空间复杂度O(1)O(n)O($n^2$)渐进符号渐进上界的括号内要大于等于等式左边的计......
  • 数据结构——顺序表
    一、线性表的顺序储存(连续)表示顺序存储的定义:逻辑上相邻的数据元素存储在物理上相邻的存储单位中存储结构。二、线性表的顺序表示和实现        1、线性表存储空间分配#defineList_size100 //存储空间初始分配量typedefintElemtype;// 静态分配typedefst......
  • C语言数据结构专题--顺序表(1基础)
    前言我们在对C语言有一定的了解之后,我们就可以开始数据结构的学习了,数据结构多用指针、结构体、动态内存开辟等知识,若对这些知识还不太了解的朋友,就需要加深其理解了,那么废话不多说,我们正式开始本节的学习什么是数据结构数据结构是由"数据"和"结构"两个词相组合得到的......
  • 什么是数据类型,什么是数据结构。
    数据类型,是人对数据的分类。人用这个信息,人自己或者让编译器做一种运动,将一种形式的数据转换成另一种形式的数据。数据结构,是人认为的数据之间的关系。数据类型是程序设计语言或者编译原理的概念。只讨论数据结构,可以不使用数据类型这个概念,可以不用高级程序设计语言,可以直接用......
  • (Java)数据结构——图(第三节)BFS的实现
    前言本博客是博主用于复习数据结构以及算法的博客,如果疏忽出现错误,还望各位指正。广度优先搜索的原理好了,还是这张图,不过是广度优先搜索不难看出,就是“一层一层”搜这次咱从A开始,因为如果从B开始的话,只需要一次,搜索过程就是B直接搜完,入队ACDE,isVistied全部ture,结束......
  • 驱动对象和设备对象数据结构
    驱动对象:每个驱动程序都会有唯一的驱动对象与之对应,并且这个驱动对象是在驱动加载时被内核中的对象管理程序所创建的。驱动对象用DRIVER_OBJECT数据结构表示,它作为驱动的一个实例被内核中的I/O管理器负责加载,并且内核对一个驱动只加载一个实例。驱动程序需要在DriverEntry中......
  • 数据结构——从入门到飞升——两个有序链表的交集
    题目:已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的交集新链表S3。输入格式:输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。输出格式:在一行中输出两个输入序列的交集序列,数字间用空格分开,结尾不能有......
  • 数据结构(六)——图的应用
    6.4 图的应用6.4.1最小生成树对于⼀个带权连通⽆向图G=(V,E),⽣成树不同,每棵树的权(即树中所有边上的权值之和)也可能不同。设R为G的所有⽣成树的集合,若T为R中边的权值之和最小的生成树,则T称为G的最小生成树(Minimum-Spanning-Tree,MST)。最小生成树可能有多个,但边的权值之......