首页 > 其他分享 >数据结构泛做

数据结构泛做

时间:2023-07-12 17:15:12浏览次数:30  
标签:gcd 分块 线段 sqrt 修改 区间 数据结构

为啥这个一向很讨厌ds题的人会在临考前做根号题呢,懂得都懂.

(因为上课只有想这种不用脑子的东西才能想出来)

10月15日 CF edu F题

不知道这题我为啥要想这么久,看来是应该好好休息一下了

大意就是单点修改,询问[l,r]区间每个数的出现次数是否都是k的倍数

第一,要知道分块是可以O(1)区间查询 O(sqrt)单点修改的

第二,要知道分块是可以O(1)区间修改,O(sqrt)区间查询的

首先,一年半前这个题的不带修弱化版本我是在牛客上看到过的,就是从左往右数,把每个颜色的第c次出现的位置, 赋上权值c%k.这样相当于把几种颜色变成了个不断更新的数组,问这个数组在l-1时刻和在r时刻是否相等,这个当然是哈希.

然后对于出现次数cnt<=sqrt n的颜色,自然是可以继续使用这个方法的.因为对于这些颜色,k<= sqrt n.枚举每个可能被问到的k,修改的时候把这个点后面的哈希值加同一个数.需要差分,用第二种分块

对于出现次数>=sqrt n的,由于不超过sqrt n个,可以直接在询问时挨个算区间内出现次数,用分块实现sqrt(n)的单点修改和O(1)的区间查询.用第一种分块就行了.

细节比较繁琐,但挺好卡过去的......

ZJOI2022 众数

这个是信息课和午休的时候想的,想了很久,感觉很妙

我们枚举任意的(i,j),i是外众数,j是内众数.

显然,只要i,j任何一方的出现次数>=sqrt 都是可以用前缀和做掉的,因为最大子段和可以缩成相邻的正数负数来做,大大减少了数量.

所以只要考虑双方都<=sqrt的情况了.所以先把这些数拿出来形成一个新的序列.这些数的出现次数小,可以枚举选取的区间(区间两端点必然是这个外众数).需要求区间众数吗?大可不必,只要按顺序枚举区间左端点l,在向右跳到下一个相同颜色的过程中,每个不同颜色出现次数的序列会发生变化.移动左端点的过程中,可以暴力更新这个在不同时刻的序列,只要在每个位置存储sqrt个数(变成了一个矩阵),第i个数表示在[l,当前位置]中出现次数为i的有几个,每次修改就相当于把这个矩阵的某一行减去1,下一行加1,总共进行不超过sqrt种修改即可.好想亲自体验一下省选啊,上次参加已经是初二了,当年又不好好打,留给我的机会不多了,一定要抓住啊!!!不要辜负我多年来的汗水和泪水啊!!!


CF1716E:

因为换的块都是整的,所以两次重复操作可以抵消

同时这个题还是蛮经典的,转成左右子树交换的形式

搜2^18种状态,若某层为1则换掉左右子树,线段树区间合并

但不知道场上为啥过不了

似乎神九也是这么写的

其实场上想了很久的根号做法,但一直不知道<=9的k咋搞

等一手题解

好吧题解也是这么做的

CF1716F:

把指数拆开

交换前后项

套组合意义

NC某个题:

题意是给m个条件形如[L,R]是回文串,问最后能判断几个i满足[1..i]==[n-i+1..n]

并查集常规要N^2

把串倒过来接在后面,前一段连后一段,连的边就变成顺的

目标是把每个元素都连到各自的一个集合里

于是把连的区间二进制分解成log个,连到反串对应区间

类似线段树pushdown,把大区间步步分成两个子区间,与对应的反串合并。

因为一个区间只用最后合并到一个集合里,所以每个点pushdown只要一次,就把时间省下来了。

不平凡的线段树优化建图


很久之前在医院里口胡了个 @血色黄昏 发的题,原题太水我给它升级了一下,今天难得有得休息,就写一下

话说我tm比正常新高一还忙!(

给定a1...an (ai∈INT)每次可以随意把序列中一个数修改到[1,Ri](1<=i<=q,操作独立,Ri∈INT)范围内,每次对询问的Ri回答gcd>1的原序列子区间最多能修改到多少个。

n q 均在1e5级别,而ai,Ri太大,于是思路就很清晰了

首先考虑单独询问怎么做

显然先线段树一波求出前后缀的答案,然后算包含某个点的gcd区间。

因为从一个点开始取gcd,只有均摊 ln n个取值 ,用尺取法算出每个前缀gcd对应后缀最多取到哪里。 单log可以解决

询问有q次,把询问排序以后直接暴力推指针会T。

但每个点其实只有一个ln ^ 2个拐点的分段函数,于是把这些拐点放到vector里做扫描线。按顺序加、删、求最大值。复杂度 O (n ln^2) 常数较大,实际效果类似于2log ,太慢了,HG的百年老机只能勉强卡过。

事实上,初始时序列可以砍成几段gcd>1的段,整段整段跳,然后对断点单独求,快很多。HG机上都可以跑到2e5,本地1e6无压力。

不要问我为什么这种垃圾题都要写,我不在HG,是一叶在群里问的,太久没做题了才有点新鲜感,结果一看真tm无脑题,怪不得HGOI这么屑

怪不得我配不上学OI!!!

标签:gcd,分块,线段,sqrt,修改,区间,数据结构
From: https://www.cnblogs.com/anticipator/p/17548212.html

相关文章

  • 数据结构学习2
    5、线性表的链式存储结构①定义链式存储:用一组任意的存储单元存储线性表中的数据元素。线性链表:用这种方法存储的线性表简称线性链表。特点:结点在存储器中的位置是随意的,即在逻辑上相邻的数据元素在物理上不一定相邻。实现:为了正确表示结点间的逻辑关系,在存储每个结点......
  • Redis 数据结构 - 链表
    链表-List的底层实现链表提供了高效的节点重排能力,可以通过顺序访问的方式访问节点,并且支持增加删除节点调整长度。由于C语言原生并不支持链表,redis的链表是自己实现的。List的底层实现就是一个双向链表,支持从链表的两端进行push和pop操作,时间复杂度是O(1)。同时支持在......
  • 数据结构与算法 #18 下跳棋,极富想象力的同向双指针模拟
    ⭐️本文已收录到AndroidFamily,技术和职场问题,请关注公众号[彭旭锐]和[BaguTreePro]知识星球提问。学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越抽象,它能覆盖的问题域就越广,理解难度也更复杂。在这个专栏里,小彭将基于Java/Kotlin语言,为你分享常......
  • 数据结构(第七章)
    数据结构(第七章)基本概念查找:在数据集合中寻找满足某种条件的数据元素的过程称为查找。查找表:用于查找的数据集合称为查找表平均查找长度:在查找过程中,一次查找的长度是指需要比较的关键字次数,而平均查找长度则是所有查找过程中进行关键字的比较次数的平均值。线性表查找一......
  • 浅谈BIT本科数据结构与算法课程 1
    关于C++基本输入输出流#include<bits/stdc++.h>usingnamespacestd;intmain(){ inta,b; cin>>a>>b; cout<<a<<endl; return0;}栈和队列关于stl#include<algorithm>vector<int>x;x.push_back(n);x.pop_back();x.back();x[1......
  • redis数据结构-String(SDS)
    redis数据结构(一)注:以下源码部分,来自redis-7.0.12,redis-3.0redis有一个核心的对象,叫做redisObject,用来标识所有的key和value,用结构体reidsObject来标识String、Hash、List、Set、Zset五种数据结构。源码位置在server.h。/*Objectsencoding.Somekindofobjects......
  • 数据结构链表的基本操作
    /*数据结构单向链表基本操作节点类*/importjava.util.Iterator;importjava.util.function.Consumer;publicclassshujujiegouimplementsIterable<Integer>{//整体privateNodehead;//头指针@OverridepublicIterator<Integer>iterator(){......
  • 数据结构问题
    编写一个时间复杂度为O(n),空间复杂度为O(1)是什么意思时间复杂度为O(n)表示算法的执行时间与输入规模n成正比,即算法的执行时间随着输入规模的增加而线性增长。空间复杂度为O(1)表示算法所需的额外空间是固定的,与输入规模n无关。这意味着算法使用的空间是常数级别的,不随输入规......
  • 【数据结构与算法】队列算法题
    TS实现队列interfaceIQueue<T>{//入队enqueue(item:T):void;//出队dequeue():T|undefined;//队首peek():T|undefined;//是否为空isEmpty():boolean;//大小size():number;}classArrayQueue<T>implementsIQueue<T>{......
  • 【数据结构与算法】栈相关算法题(长期更新)
    TS实现栈interfaceIStack<T>{push(e:T):void;pop():T|undefined;peek():T;isEmpyt():boolean;size():number;}//implements:实现接口,一个类可以实现多个接口classArrayStack<T>implementsIStack<T>{privatedata:T[]=[];//pri......