数据结构
文章平均质量分 54
每种数据结构都有各自的优点,了解它们,灵活地根据情况选择使用哪种数据结构,对于解题至关重要
ssl_lhj
这个作者很懒,什么都没留下…
展开
-
小陶的疑惑2
题目大意就是区间修改单点查询。题目分析用差分思想,用树状数组维护CodeCodeCode#include<iostream>#include<cstdio>#define lb(x) (x&-x)#define ll long long#define sco 1000010using namespace std;ll n,m,c[sco];inline void xg(ll x,ll y){for(;x<=n;x+=lb(x))c[x]+=y;}原创 2022-01-12 16:25:24 · 227 阅读 · 0 评论 -
st表的介绍
ststst表是一种用于解决RMQRMQRMQ问题的工具,O(nlogn)O(nlogn)O(nlogn)的时间建表,只要O(1)O(1)O(1)的时间查询,可以很好地完成查询任务。但是美中不足的一点是,ststst表不支持修改操作,因此有涉及修改的题目,请使用线段树或者其他数据结构。ststst表的建表方法st表的表示方法st表用sti,jst_{i,j}sti,j表示[j,j+i2−1][j,j+i^2-1][j,j+i2−1]中的区间最小值。那么怎么进行建表呢?首先st0,jst_{0,原创 2022-01-12 15:40:06 · 311 阅读 · 0 评论 -
树状数组简单介绍
树状数组图解原创 2021-12-25 11:46:18 · 427 阅读 · 0 评论 -
【树状数组】洛谷P3368
题目大意给出一个数组,有两种操作,一种是把一个区间内的数全部加上k,一种是输出第x个数的值。题目分析线段树做法用一个树状数组,维护差分值,当区间修改的时候,只要修改左端点与右端点的值就可以了,单点查询a[x]a[x]a[x]时,就直接求出xxx的前缀和就好了。CodeCodeCode#include<iostream>#include<cstdio>#define lb(x) (x&-x)#define ll long long#define sco 1原创 2021-12-25 09:55:19 · 98 阅读 · 0 评论 -
【树状数组】洛谷P3374
题目大意给出一个初始数组,有两种操作,一种是将第x个数加上k,一种是求[x,y]区间和。题目分析两种方法,线段树请点击这里,本文使用树状数组来完成这道题。CodeCodeCode#include<iostream>#include<cstdio>#define lb(x) (x&-x)#define ll long long#define sco 1000010using namespace std;ll n,m,a[sco],c[sco];inlin原创 2021-12-25 09:22:31 · 273 阅读 · 0 评论 -
【字典树】YBTOJ:前缀统计
题目大意先给出nnn个字符串,再给出mmm个询问,每个询问包含一个字符串,表示询问给出的字符串中有多少个是询问字符串的后缀。题目分析字典树,先根据给出的字符串建立一棵字典树,再根据询问直接查询。CodeCodeCode#include<iostream>#include<cstring>#include<cstdio>#define sco 1000010using namespace std;int n,m,tot=1,ce[sco],trie[sc原创 2021-12-24 19:14:20 · 165 阅读 · 0 评论 -
洛谷 P3368 树状数组2
题目大意给出一个数组,有两种操作,一种是把一个区间内的数全部加上k,一种是输出第x个数的值。题目分析直接暴力操作,肯定会超时,我们需要树状数组或者简单线段树来优化。Code#include<iostream>#include<cstdio>#define sco 500010using namespace std;int n,m,f,x,y,z,ans,a[sco];struct tree{ int l,r,data,lz;}tr[sco*4];void u原创 2021-12-03 21:43:07 · 309 阅读 · 0 评论 -
洛谷 P3374 树状数组模板1
题目大意给出一个初始数组,有两种操作,一种是将第x个数加上k,一种是求[x,y]区间和。题目分析直接暴力肯定TLE,我们可以用简单线段树或者树状数组优化,这里作者就采用简单线段树通过#include<iostream>#include<cstdio>#define sco 100010#define ll long longusing namespace std;ll n,m,f,x,y,z,ans,a[sco];struct tree{ ll l,r,data原创 2021-12-03 18:12:41 · 179 阅读 · 0 评论 -
数据结构:线段树
文章目录前言什么是线段树线段树的基本操作线段树的结构体数据更新函数怎么建造一棵线段树单点修改与区间查询单点修改区间查询区间修改第四个节点变量:lazylazylazy为什么要用lazylazylazy?lazylazylazy的作用前言 最近几天一直在线段树上面死磕,现在大概弄懂了较简单的线段树(只支持加减法的那种),来这里写篇大约的笔记,等以后学习了更多还会更新。什么是线段树 线段树是一种二叉树,每个节点都代表一个区间的和(或者最大值等等,可以自己定义。以下用和作为例子)。比如说根节点就代表原创 2021-08-13 20:03:03 · 214 阅读 · 2 评论 -
单链表的一些基本操作
文章目录前言单链表的的定义在链尾添加新节点在链中插入节点在链中删除节点完整操作实例前言在网上看到了很多奇奇怪怪的链表操作,不仅代码多还难以理解,给出的代码还会编译错误(也许只是小编愚钝……),后来找了很多资料,终于找到一种精简的链表,所以写一篇文章来介绍一下。单链表的的定义十分简单,只要定义一个头指针,尾指针就好了。struct node{ int data; node *next;}*head,*p,*tail;//head头指针,tail尾指针,p用于操作在链尾添加新节点inli原创 2021-08-15 19:18:03 · 124 阅读 · 0 评论