
数据结构
IDSY QAQ
日常三问:我被机残了吗?我密码被盗了吗?我的号还在吗?
展开
-
后缀数组模板
const int Maxn = 2 * 1e5; const int Inf = 0x3f3f3f3f; int sa[Maxn + 5], id_bak[Maxn + 5]; //sa[i] len + 1 ~ 2 * len 排名为 i 的串的编号 //id_bak[i] 编号为 i 的串该被放进哪个桶 int sort_id[Maxn + 5], poi_bak[Maxn + 5]; //sort_id[i] 按照 len + 1 ~ 2 * len 排序的排名为 i 的串的编号 //poi_原创 2022-01-24 21:30:58 · 235 阅读 · 0 评论 -
阿狸的打字机
#include <map> #include <cmath> #include <queue> #include <vector> #include <cstdio> #include <cstdlib> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define fi first原创 2022-01-24 09:50:57 · 193 阅读 · 2 评论 -
磁力块题解
1.前言 分块好好 vanvanvan 啊。 2.题解 link 方法:搜索+分块 由于我们只能在 (x0,y0)(x_0, y_0)(x0,y0) 处吸引磁石,所以我们只需要考虑到 (x0,y0)(x_0, y_0)(x0,y0) 的距离就可以了。所以我们的结构体 NodeNodeNode 保存 444 个变量 disdisdis(到(x0,y0)(x_0, y_0)(x0,y0)的距离的平方), mmm, ppp, rrr (半径的平方)。attention: 为了防止卡精度,我们可以采用平原创 2021-06-22 13:38:59 · 201 阅读 · 0 评论 -
棋盘上的守卫
一.前言 这个题好 喵 妙啊,不写标签我是真没想到。。。 二.题面 棋盘上的守卫 三.题解部分 我们思考一个问题,选择一个点 a[i][j]a[i][j]a[i][j],TaTaTa 能为我们带来什么呢??? 这里定义一个阶段的概念:阶段iii 表示横向或纵向前i−1i - 1i−1 (列/行)已经安排好守卫,开始放置第iii (列/行)。 在 (i,j)(i,j)(i,j) 这个点上我们可以放置两种守卫,第一种是横向守卫,第二种是竖向守卫,所以 TaTaTa 们之间只能选择一种,可以抽象成一条边,链接的是原创 2021-03-12 19:02:18 · 220 阅读 · 0 评论 -
分块
int Size, Num, L[Maxsn + 5], R[Maxsn + 5], Block[Maxn + 5]; void Build (int l, int r) { Size = sqrt (r - l + 1); Num = ceil ((r - l + 1) * 1.0 / Size); for (int i = 1; i < num; i++) { L[i] = 1 + (i - 1) * Size; R[i] = i * Size; for (int j = L[原创 2021-02-23 14:23:47 · 132 阅读 · 0 评论 -
亚特兰蒂斯中的Push_Up分析
1.定义 当前节点为p,Ta的父节点为fa l表示矩阵的左上角的y集合 r表示矩阵的右下角的y集合 tr[p].cnttr[p].cnttr[p].cnt 表示 li<=tr[p].l,tr[p].r<=ri,tr[fa].l<=li或者tr[fa].r>rili <= tr[p].l, tr[p].r <= ri, tr[fa].l <=li 或者 tr[fa].r > rili<=tr[p].l,tr[p].r<=ri,tr[fa].l<原创 2020-12-12 20:38:14 · 355 阅读 · 0 评论 -
线段树
区间最大值 struct Segment_Tree { int l, r; int Max_Date; }Seg_Tr[MAXN * 4]; int Max (int x, int y) { return x > y ? x : y; } void _Build (int p, int l, int r) { Seg_Tr[p].l = l; Seg_Tr[p].r = r; if (l == r) { Seg_Tr[p].Max_Date = a[l]; return; }原创 2020-11-21 09:13:33 · 120 阅读 · 0 评论 -
KMP算法分析
2.next数组求法 操作见课件,这里不赘述 1. s[i]≠s[j]s[i] \neq s[j]s[i]=s[j] 则s[i]s[i]s[i] 和 s[j]s[j]s[j] 无法匹配,所以我们一定无法选择 s[j]s[j]s[j] 且 next[i]=1next[i] = 1next[i]=1, 所以最长公共前后缀长度为:一段包含s[i]s[i]s[i]的区间和一段不包含s[j]s[j]s[j]的区间,且两区间相同,next[j]next[j]next[j]表示先将不包含s[i]s[i]s[i]的区原创 2020-11-14 09:52:15 · 135 阅读 · 0 评论