首页 > TAG信息列表 > buc

CF715C Digit Tree

沝黑。 首先这种统计路径的问题一般联想点分治,然后考虑如何处理经过一个点 \(u\) 的路径。 考虑有一个点 \(p\in u\) 的子树,然后记录路径 \(p\to u\) 和路径 \(u\to p\) 的答案。前者放入一个映射统计,后者存在数组 \(S\) 里面。 最后整体统计,枚举 \(x\in S\),设 \(x\lt M\),统计映射

LG7882 [Ynoi2006] rsrams【阈值法,分块,莫队】

给定长为 \(n\) 的序列 \(a_1,\cdots,a_n\),\(m\) 次询问区间 \([L,R]\),求其所有子区间的绝对众数之和。 \(n,m\le 10^6\),\(1\le a_i\le n\),时限 \(8.0\text{s}\)。 若固定绝对众数是 \(x\),要求多少个子区间的 \(2[a_i=x]-1\) 之和 \(>0\),取前缀和之后问题就是区间顺序对计数。 优

树上启发式合并(dsu on tree)学习笔记

树上启发式合并(dsu on tree)学习笔记 闲话 树上启发式合并,又称 dsu on tree(虽然跟 dsu 并查集完全没关系),用于离线处理子树相关询问。 它是一种利用了重链剖分性质的暴力,时间复杂度为完全正确的 \(\mathcal{O}(n\log n+m)\),个人认为跟莫队等都是非常优雅的暴力。 阅读本文并不需要重

后缀数组

前言 神仙们都会SA了,只剩我不会. 马上来补这个强大字符串算法. 什么是后缀数组 神 \(\mathrm{{\color{black}w}{\color{red}{ind\_whisper}}}\) 说 : 后缀数组就是对于字符串后缀建立的数组. 其实 \(\uparrow\) 这个定义还是比较贴切的 . 首先定义什么是后缀. 后缀就是一个字符

P1903 [国家集训队]数颜色 / 维护队列

带修改莫队板子 块长取 \(O(n^{\frac 2 3})\) 总时间复杂度为 \(O(n^{\frac 5 3})\) \(\text{Code}\) #include <cstdio> #include <cmath> #include <algorithm> #include <iostream> #define re register using namespace std; const int N = 133343; int

【题解】 CF936E Iqea 平面图分治+点分树

考虑怎么求图上任意两点距离。 考虑分治,每次找一条竖着的线段,把区域划分成两半,计算所有点到切分线段的距离,于是穿过这条切分线的答案就可以被计算出来了。 那么求一个点到点集最短的距离,动态更新点集,怎么做? 不难发现,可以把分治的过程储存下来,具体来说,以点分树的形式储存。查询在点

POJ2430 Lazy Cows

vjudge传送 这题与其说是状压dp,到更像是插头dp。 看到\(B\)那么大,肯定要先离散化,然后再预处理出来每一列牛的位置,即有一头还是两头,在上面还是下面。 转移其实比较显然,就是有点恶心。\(dp[i][j]\)中的\(j\)分四种情况: 1.棚子只建在第一行。 2.棚子只建在第二行。 3.两个棚子分别建

小清新人渣的本愿

VII.小清新人渣的本愿 仍是 bitset 优化莫队。 具体而言,减操作就直接右移/左移 bitset(具体哪个都行,反正是等价的)然后求 and 看看是否非零即可;加操作就同时维护原本的 bitset 和取反后的 bitset,然后就像减操作一样处理即可;乘操作就直接 \(\sqrt n\) 地暴力即可。 时间复杂度 \(O(n

[JSOI2007]字符加密

IX.[JSOI2007]字符加密 这题的思路非常简单——断环复制成链,然后直接后缀排序一下即可。 为什么呢? 我们考虑两条后缀。假如它们在前\(n\)位中有所不同,显然它们之间的相对顺序不会有问题; 否则,假如它们前\(n\)位全都相同,则因为反正最后输出的就是最后一个字符,所以相对顺序没有影响,直

LG P4149 [IOI2011]Race

Description 给一棵树,每条边有权。求一条简单路径,权值和等于 $k$,且边的数量最小。 Solution 点分治,统计答案时只统计经过该节点的所有链(包括以该节点为端点) 每次用桶维护之前的子树中每个路径权值和所对应的最少边数 时间复杂度$O(n \log n)$ #include<iostream> #include<cstri

Responsibilities

Responsibilities 了解公司的所有产品及其功能,对公司产品和系统设备进行整合应用。   1. 设备的开通协调。         申请信息包括:                 开通业务类型,开通时间,截至时间,卫星小站地点,卫星主站地点,用户主站地址。                 上行最大带宽

[P3806] 【模板】点分治 - 点分治

辣鸡蒟蒻怎么今天才来敲这个模板题 好像还敲了很久的样子 (大雾) #include <bits/stdc++.h> using namespace std; #define int long long const int N = 10005; vector<pair<int,int> > g[N]; int dis[N],siz[N],msiz[N],n,m,k[N],ans[N],u[N]; vector <int> st; int buc[100000

[USACO06DEC]牛奶模式Milk Patterns

Description 求字符串 \(s\) 的最长可重叠重复 \(k\) 次子串。 Solution 重复出现了 \(k\) 次,相当于我们选择了 \(k\) 个后缀,求他们的 \(lcp\)。 显然 \(k\) 个后缀的 \(rank\) 是连续的,所以重复出现 \(k\) 次的前缀就是 \(min(height[l+1\dots l+k-1])\)。 所以我们需枚举 \(i\),

入阵曲:桶,前缀和

给出的题解不错,所以不写得太详细了。 谁不会60分的那真是没办法了。 1 #include<cstdio>2 int x[405][405],n,m,k,ans;3 int main(){4 scanf("%d%d%d",&n,&m,&k);5 for(int i=1;i<=n;++i)for(int j=1,y;j<=m;++j)scanf("%d",&y),x[i][j]=(x[i-1]

BZOJ 4278 Tasowanie (后缀数组)

居然把后缀数组写成n^2的。。我真厉害。。 想了无数种方法,最后发现就是比后缀字典序排名,后缀数组即可 注意每个字符串的结尾处要加上一个\(\inf\), 因为相当于要把空位尽量后移使得非空位集中在前面 代码 #include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm

[EOJ629] 两开花

Description 给定一棵以 \(1\) 为根 \(n\) 个节点的树。 定义 \(f(k)\) :从树上等概率随机选出 \(k\) 个节点,这 \(k\) 个点的虚树大小的期望。 一个点 \(x\) 在这些被选出的 \(k\) 个点的虚树上,当且仅当它满足下列条件至少一个: \(x\) 被选出。 存在两个被选出的节点 \(a,b\),使得 \(