随笔 - 531
文章 - 0
评论 - 3
阅读 -
10215
随笔分类 - 数据结构
树状数组的板子
摘要:该数据结构可以维护序列的前缀和 1. 单点修改,求区间和 #include <iostream> using namespace std; const int N=5e5+2; int n,tr[N]; int lowbit(int x){ return x&-x; } void add(int x
阅读全文
pingpong uva1428
摘要:题目 求 三元组(i,j,k), i<j<k, 满足 a[i]<a[j]<a[k] 或者 a[i]>a[j]>a[k],有多少组?(a[i] <=1e5) 枚举 j , 考虑 a[i]<a[j] 有多少 i 满足这个条件 c[j] 正反求出 c[ i ] ,d[ i ] ans= c[i]*(n-i
阅读全文
st表板子
摘要:const int N=1e5+2; int st[N][20],n,a[N]; void init(){ int i,j; for(i=1;i<=n;i++) st[i][0]=a[i]; for(j=1;j<20;j++) for(i=1;i+(1<<j)-1<=n;i++){ st[i][j]
阅读全文
Frequent values uva11235
摘要:给一个非降序的排列{a},多次询问区间 (l,r) 中出现次数最大的值,输出这个次数 比如 1 2 6 6 8 8 8 10 23 相同的数据靠在一起,我们将相同数据组成一块(要处理出这个块的信息,比如左右端点 先查询中间的块的最大值(比如用st表) ,然后和两边的答案比较一下 #include <
阅读全文
线段树板子
摘要:有2种方式,都是用的lazy标记,但具体用法不同 1.区间加值 2.求区间和 https://www.luogu.com.cn/record/89949709 3.求区间最大值 https://www.luogu.com.cn/record/100443383 struct Tree{ int v;
阅读全文
一本通1549
摘要:给定一个正整数数列 a1,a2,a3,....a[n],每一个数都在 0∼p–1之间。可以对这列数进行两种操作: 添加操作:向序列后添加一个数,序列长度变成 n+1 询问操作:询问这个序列中最后 m个数中最大的数是多少。 程序运行的最开始,整数序列为空。写一个程序,读入操作的序列,并输出询问操作的答
阅读全文
滑动窗口问题
摘要:luogu 1886 有一个长为 n 的序列 a,以及一个大小为 k 的窗口。现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值。 单调队列,顾名思义 假设我们要维护一个单调递增的序列(不一定连续), 当遇到一个数 a[i] , 从 i-1 开始往前剔除元素x(当 a
阅读全文
luogu 1908 逆序对板子
摘要:逆序对的本质是二维偏序 给第一维排序(输入时已排好),统计 y(k)>=y(i) k<i 的个数 用树状数组维护 y 值 前缀和,需要的时候直接查询 该题需要离散化这个y ,再作为树状数组的下标 #include <iostream> #include <algorithm> using names
阅读全文
uva 1401
摘要:给一个串和一个字典(一些字符串) 将这个串分解为字典单词的连接(如 abcd = ab+cd =a+bcd ) 问有多少方案 线性dp 枚举位置 i f[i] += f[j] i<j , string(i,j) 为字典单词 直接枚举 j 和单词 明显超时 用到字典树,从 位置 i 开始在字典树上找单
阅读全文
luogu 4588
摘要:给xx这个数进行操作 1 m:将 xx 变为 x,并输出 x %mod 2 pos:将 xx 变为 xx 除以第 pos 次操作所乘的数(保证第 pos 次操作一定为类型 1,对于每一个类型 1 的操作至多会被除一次), 并输出 xx%mod 以修改次数为下标建立线段树,每个节点存对应区间元素的乘积
阅读全文
uva 1401 字典树模板
摘要:给一个串和一个字典(一些字符串) 将这个串分解为字典单词的连接(如 abcd = ab+cd =a+bcd ) 问有多少方案 线性dp 枚举位置 i f[i] += f[j] i<j , string(i,j) 为字典单词 直接枚举 j 和单词 明显超时 用到字典树,从 位置 i 开始在字典树上找单
阅读全文
luogu 1908 逆序对
摘要:逆序对的本质是二维偏序 给第一维排序(输入时已排好), 统计 y(k)>=y(i) k<i (或者 y(k)<=y(i) ,k>i ) 用树状数组维护 y 值 前缀和 该题需要离散化这个y ,再作为树状数组的下标 第一种 y(k)<=y(i) ,k>i #include <iostream> #in
阅读全文
存图
摘要:int nxt[M],go[M],hd[N],all; void add(int x,int y){ go[++all]=y,nxt[all]=hd[x]; hd[x]=all; }
阅读全文
滑动窗口 问题
摘要:luogu 1886 有一个长为 nn 的序列 aa,以及一个大小为 kk 的窗口。现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值。 单调队列,顾名思义 假设我们要维护一个单调递增的序列(不一定连续), 当遇到一个数 a[i] , 从 i-1 开始往前剔除元素x(
阅读全文
st表 查询区间最值
摘要:const int N=1e5+2; int st[N][20],n,a[N]; void init(){ int i,j; for(i=1;i<=n;i++) st[i][0]=a[i]; for(j=1;j<20;j++) for(i=1;i+(1<<j)-1<=n;i++){ st[i][j]
阅读全文
树状数组的一些板子
摘要:该数据结构可以维护序列的前缀和 1. 单点修改,求区间和 #include <iostream> using namespace std; const int N=5e5+2; int n,tr[N]; int lowbit(int x){ return x&-x; } void add(int x
阅读全文