首页 > 其他分享 >模板

模板

时间:2024-03-09 15:34:42浏览次数:20  
标签:cnt int void -- sec sa 模板

int BSGS(int a , int b){
	int y = sqrt(p) + 1;
	gp_hash_table<int , int> mp;
	int t = b;
	for(int n = 0; n <= y; ++ n , t = Mul(t , a)) mp[t] = n;
	int tmp = 1;
	for(int i = 1; i <= y; ++ i , tmp = Mul(tmp , a));
	t = tmp;
	for(int m = 1; m <= y; ++ m , t = Mul(t , tmp)) {
		if(mp.find(t) != mp.end()){
			return m * y - mp[t];
		}
	}
	return -1;
}
int d[N << 1];
int manacher(char* s){
	int len = strlen(s + 1);
	d[1] = 1;
	for(int i = 2 , l = 1 , r = 1; i <= len; ++ i){
		int j = l + r - i , dj = (j ? d[j] : 0);
		d[i] = max(0 , min(dj , j - l + 1));
		if(j - dj + 1 <= l){
			while(i - d[i] >= 1 && i + d[i] <= len && s[i - d[i]] == s[i + d[i]]){
				++ d[i];
			}
			l = i - d[i] + 1 , r = i + d[i] - 1;
		}
	}
	int res = 1;
	for(int i = 1; i <= len; ++ i){
		res = max(res , d[i] - 1);
	}
	return res;
}
const int N = 1e5 + 5;
const int MB = ceil(log2(N)) + 1;
struct S_T {
	int st[50][N] , pw2[50];
	void init(int* a , int n){
		for(int i = 1; i <= n; ++ i){
			st[0][i] = a[i];
		}
		int lim = __lg(n) + 1;
		pw2[0] = 1;
		for(int i = 1; i <= lim; ++ i)pw2[i] = pw2[i - 1] * 2;
		for(int s = 1; s <= lim; ++ s){
			for(int i = 1; i + pw2[s] - 1 <= n; ++ i){
				st[s][i] = max(st[s - 1][i] , st[s - 1][i + pw2[s - 1]]);
			}
		}
	}
	int qwq(int l , int r){
		int LG = __lg(r - l + 1);
		return max(st[LG][l] , st[LG][r - pw2[LG] + 1]);
	}
}ST;
struct S_A {
	int sa[N * 2] , rk[N * 2] , rk1[N * 2] , sz = S , sec[N * 2] , cnt[N * 2];
	void init(){
		for(int i = 1; i <= len; ++ i) rk[i] = c[i] ,  ++ cnt[c[i]];
		for(int i = 1; i <= S; ++ i) cnt[i] += cnt[i - 1];
		for(int i = len; i >= 1; -- i) sa[cnt[rk[i]] -- ] = i;
	}
	void radixsort(){
		for(int i = 0; i <= sz; ++ i) cnt[i] = 0;
		for(int i = 1; i <= len; ++ i) ++ cnt[rk[i]];
		for(int i = 1; i <= sz; ++ i) cnt[i] += cnt[i - 1];
		for(int i = len; i >= 1; -- i) sa[cnt[rk[sec[i]]] -- ] = sec[i] , sec[i] = 0;
	}
	void Sa(){
		init();
		for(int k = 1; k <= len; k *= 2){
			int oo = 0;
			for(int i = len - k + 1; i <= len; ++ i) sec[ ++ oo] = i;
			for(int i = 1; i <= len; ++ i){
				if(sa[i] > k){
					sec[ ++ oo] = sa[i] - k;
				}
			}
			radixsort();
			for(int i = 1; i <= len; ++ i) rk1[i] = rk[i];
			sz = rk[sa[1]] = 1;
			for(int i = 2; i <= len; ++ i){
				if(rk1[sa[i]] == rk1[sa[i - 1]] && 
					rk1[sa[i] + k] == rk1[sa[i - 1] + k]){
					rk[sa[i]] = sz;
				}
				else {
					rk[sa[i]] = ++ sz;
				}
			}
			if(sz == len) return ;
		}
	}
}SA;

标签:cnt,int,void,--,sec,sa,模板
From: https://www.cnblogs.com/TongKa/p/18062762

相关文章

  • Java登陆第三十二天——ES6(一)let、const、模板字符串、解构表达式、箭头函数
    所谓ECMAScript6也就是JS6。这次更新带来了大量的新特性,使JS代码更简洁,更强大。复习JS请走:JS入门JS6文档请走:JS6菜鸟教程ES6新增了let和const关键字,用作声明变量let相较于var,let声明的变量更规范。ES6更推荐使用let。let不可重复声明let可以作为成员变量:(let遇见非函数......
  • 二维坐标离散化模板
    structTwo_D_Discrete{ intn,tot1=1,tot2=1; vector<vector<int>>mp; vector<int>x,y,nx,ny; vector<pair<i64,i64>>a; vector<PII>New; Two_D_Discrete(int_n,vector<pair<i64,i64>>&_a):......
  • SpringBoot 支付宝付款接口类、支付异步回调函数模板
    1.付款接口类1.1.引入Maven依赖<dependency><groupId>com.alipay.sdk</groupId><artifactId>alipay-sdk-java</artifactId><version>4.38.221.ALL</version></dependency>1.2.将下面代码保存为AlipayTemplate.java@Config......
  • 1.Prefix前缀和【模板】
    [[#题目描述|题目描述]][[#输入描述|输入描述]][[#输出描述|输出描述]][[#输入样例1|输入样例1]][[#输出样例1|输出样例1]][[#暴力穷举|暴力穷举]][[#前缀和数组|前缀和数组]]题目描述给定义一个数组a,有q次询问,对于每次询问:给定两个整数l,r,求出${a_l}$$+$${a_{l+1}}$......
  • 2.diff差分【模板】
    [[#差分数组|差分数组]][[#差分数组#三个数组的关系|三个数组的关系]][[#题目描述|题目描述]][[#输入描述|输入描述]][[#输出描述|输出描述]][[#输入样例1|输入样例1]][[#输出样例1|输出样例1]]差分数组如下叫做差分数组\[d_{i}=a_{i}-a_{i-1}\]又有\[\su......
  • 简单实现邮件模板功能
    系统中经常有需要发送提醒邮件的需求,而且邮件类型和内容往往又不同,有些还需要跟业务字段做关联。这种情况下,就需要用到邮件模板功能,可以通过在模板中定义业务字段标记,通过模板引擎或自定义代码来实现这些字段的填充。下面是一个自己写的简单的,字符串替换方式实现的邮件模板功能。......
  • Maven安装本地的jar包和创建带模板的自定义项目
    Maven安装本地的jar包如果没配置Maven的环境变量,需要先CD到maven的安装目录,因为没配置环境变量,mvn命令是无法在maven安装目录以外的目录运行。cdC:\Maven\apache-maven-3.6.3\bin然后执行下面命令格式如下:mvninstall:install-file//固定格式,maven的语法-Dfile=ali......
  • 二分搜索模板
    目录最基本的二分搜索寻找左边界的二分搜索寻找右边界的二分搜索统一记忆为闭区间,只需要修改nums[mid]==target时收缩哪边边界,以及越界情况最基本的二分搜索defbinary_search(nums:List[int],target:int):left=0right=len(nums)-1while(left<=right):......
  • WPF 样式与模板
    参考样式和模板如何为控件创建样式如何为控件创建模板ContentPresenter环境软件/系统版本说明WindowsWindows10专业版22H219045.4046MicrosoftVisualStudioMicrosoftVisualStudioCommunity2022(64位)-17.6.5Microsoft.NetSDK8.0.10......
  • P3369 【模板】普通平衡树
    原题链接题解1stl模拟,注意lowerbound的效果和pos的返回值code1#include<bits/stdc++.h>usingnamespacestd;vector<int>a;intmain(){intn;cin>>n;while(n--){intop,x;cin>>op>>x;if(op==1)a.inser......