Luogu P2852 [USACO06DEC]牛奶模式Milk Patterns
水题。利用\(Height\)的性质维护一个单调栈即可。
#include <bits/stdc++.h>
using namespace std;
#define LL long long
const int N = 1000010;
int n, m = 1000000, q, s[N], sa[N], tp[N];
int rk[N], _rk[N], bin[N], height[N];
void base_sort () {
    for (int i = 0; i <= m; ++i) bin[i] = 0;
    for (int i = 1; i <= n; ++i) bin[rk[tp[i]]]++;
    for (int i = 1; i <= m; ++i) bin[i] += bin[i - 1];
    for (int i = n; i >= 1; --i) sa[bin[rk[tp[i]]]--] = tp[i];
}
void suffix_sort () {
    for (int i = 1; i <= n; ++i) {
        tp[i] = i;
        rk[i] = s[i];
    }
    base_sort ();
    for (int w = 1; w <= n; w <<= 1) {
        int cnt = 0;
        for (int i = n - w + 1; i <= n; ++i) {
            tp[++cnt] = i;
        }
        for (int i = 1; i <= n; ++i) {
            if (sa[i] > w) {
                tp[++cnt] = sa[i] - w;
            }
        }
        base_sort ();
        memcpy (_rk, rk, sizeof (rk));
        rk[sa[1]] = cnt = 1;
        for (int i = 2; i <= n; ++i) {
            rk[sa[i]] = _rk[sa[i]] == _rk[sa[i - 1]] && _rk[sa[i] + w] == _rk[sa[i - 1] + w] ? cnt : ++cnt;
        }
        if (cnt == n) break;
        m = cnt;
    }
    // printf ("sa : ");for (int i = 1; i <= n; ++i) printf ("%d ", sa[i]); printf ("\n");
}
void get_height () {
    int k = 0;
    for (int i = 1; i <= n; ++i) {
        if (k) k--;
        int j = sa[rk[i] - 1];
        while (s[i + k] == s[j + k]) ++k;
        height[rk[i]] = k;
    }
    // printf ("height : ");
    // for (int i = 1; i <= n; ++i) {
    // 	printf ("%d ", height[i]);
    // }
    // printf ("\n");
}
int que[N];
int main () {
	cin >> n >> q;
	for (int i = 1; i <= n; ++i) {
	    cin >> s[i];
	}
    suffix_sort ();
    get_height ();
	int head = 1, tail = 0, ans = -0x3f3f3f3f;
	for (int i = 1; i <= n; ++i) {
		while (head <= tail && height[que[tail]] >= height[i]) --tail;
		que[++tail] = i;
		while (head <= tail && i - que[head] >= q - 1) ++head;
		ans = max (ans, height[que[head]]);
	}
	cout << ans << endl;
}
Luogu P2852 [USACO06DEC]牛奶模式Milk Patterns的更多相关文章
- luogu P2852 [USACO06DEC]牛奶模式Milk Patterns 后缀数组 + Height数组 + 二分答案 + 扫描
		后缀数组有一个十分有趣的性质: $height[rk[i]] >= height[rk[i-1]] - 1$ Code: #include <bits/stdc++.h> #d ... 
- [洛谷P2852] [USACO06DEC]牛奶模式Milk Patterns
		洛谷题目链接:[USACO06DEC]牛奶模式Milk Patterns 题目描述 Farmer John has noticed that the quality of milk given by ... 
- P2852 [USACO06DEC]牛奶模式Milk Patterns
		link 这是一道后缀匹配的模板题 我们只需要将height算出来 然后二分一下答案就可以了 #include<cstdio> #include<algorithm> #inc ... 
- 【后缀数组】【LuoguP2852】 [USACO06DEC]牛奶模式Milk Patterns
		题目链接 题目描述 农夫John发现他的奶牛产奶的质量一直在变动.经过细致的调查,他发现:虽然他不能预见明天产奶的质量,但连续的若干天的质量有很多重叠.我们称之为一个"模式". J ... 
- [Luogu2852][USACO06DEC]牛奶模式Milk Patterns
		Luogu 一句话题意 给出一个串,求至少出现了\(K\)次的子串的最长长度. sol 对这个串求后缀数组. 二分最长长度. 如果有\(K\)个不同后缀他们两两的\(lcp\)都\(>=mid\ ... 
- [USACO06DEC] 牛奶模式Milk Patterns
		题目链接:戳我 我们知道后缀数组的h数组记录的是后缀i和后缀i-1的最长公共前缀长度,后缀的前缀其实就是子串. 因为是可以重复出现的子串,所以我们只要计算哪些h数组的长度大于等于x即可.这一步操作我们 ... 
- 洛谷P2852 牛奶模式Milk Patterns [USACO06DEC] 字符串
		正解:SA/二分+哈希 解题报告: 传送门! umm像这种子串的问题已经算是比较套路的了,,,?就后缀的公共前缀这样儿的嘛QwQ 所以可以先求个SA 然后现在考虑怎么判断一个长度为d的子串出现了k次? ... 
- 2018.07.17 牛奶模式Milk Patterns(二分+hash)
		传送门 一道简单的字符串.这里收集了几种经典做法: SAM,不想写. 后缀数组+二分,不想写 后缀数组+单调队列,不想写 hash+二分,for循哈希,天下无敌!于是妥妥的hash 代码如下: #in ... 
- USACO06DEC 牛奶模式
		题意:求最长的可重叠的 K重复子串 的长度 考虑二分长度s,转化为验证性问题. 对SA进行分组.保证组内Height最小为s.这样在组内RMQ就可以任意了,因为RMQ一定是大于S的. 只要组内元素个数 ... 
随机推荐
- 转载 -- CSS3 中关于 select 下拉列表的样式
			截图效果: 
- LODOP安装参数 及静默安装
			在cmd命令里里静默安装lodop(c-lodop不能静默安装),本人的安装文件放在D:\lodopdownload\3060\Lodop6.224_Clodop3.060,如下所示: lodop静默 ... 
- JQuery跳出each循环的方法(包含数组遍历)
			0. 前言 也许我们通过 jquery 的循环方法进行数组遍历,但是当不符合条件时,怎么跳出当前循环?(即用each方法内,当不满足条件时想break跳出循环体,想continue继续执行下一个循环遍 ... 
- Razor Pages with ASP.NET Core 2
			With ASP.NET Core 2 we get another way of building web applications. It’s one of those new things th ... 
- 把当前ubuntu系统做成镜像
			把当前ubuntu系统做成镜像 2018年06月19日 15:24:51 还需要再学习一个 阅读数:9720 原文地址: http://community.bwbot.org/topic/167/%E ... 
- 数据库 -- mysql记录操作
			一,概括 MySQL数据操作: DML 在MySQL管理软件中,可以通过SQL语句中的DML语言来实现数据的操作,包括 使用INSERT实现数据的插入 UPDATE实现数据的更新 使用DELETE实现 ... 
- IDM下载神器
			破解版IDM 个人评价:基本上能满足日常下载需求,除bt.磁力外. 不管是在线视频, 还是音乐, 电子书, 统统都能下载, 还附有爬虫功能~~ 直接附链接: 百度云链接: https://pan.ba ... 
- python深度学习库keras——安装
			TensorFlow安装keras需要在TensorFlow之上才能运行.所以这里安装TensorFlow.TensorFlow需要vs2015环境,需要wein64位环境,所以32位的小伙伴需要升级 ... 
- 【BZOJ2095】【POI2010】Bridge 网络流
			题目大意  给你一个无向图,每条边的两个方向的边权可能不同.要求找出一条欧拉回路使得路径上的边权的最大值最小.无解输出"NIE". \(2\leq n\leq 1000,1\le ... 
- NODE&NPM
			Awesome npm packages 更新版本: Mac/Linux:npm install -g n && n stable (默认安装目录为:usr/local/local/n ... 
