首页 > 其他分享 >1/21 ST表总结

1/21 ST表总结

时间:2024-01-21 22:26:43浏览次数:31  
标签:总结 21 int ll bound ST query mod

RMQ问题:区间最值查询

ST表:

  • 经过一次预处理后o(1)的离线查询任意区间最值(可重复贡献)
  • 利用区间dp的思想 
  • f[i][j]=从i开始的2的j次方的最值
  • f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1];

模板

void ST()
{
  for(int i=1;i<=n;i++)
  f[i][0]=a[i];
  for(int j=1;j<25;j++)//1e6
    for(int i=1;i+(1<<j)-1<=n;i++)
      f[i][j]=min(f[i][j-1],f[i+(1<<(j-1))][j-1]);
}
int query(int l,int r)
{
  int k=log(r-l+1)/log(2);
  return min(f[l][k],f[r-(1<<k)+1][k]);
}

 

p2629 好消息,坏消息

题意:给定一段长为n的序列,求存在多少个k使得k~n+1~k-1构成的序列任意前缀和大于等于0

SOl:

  用ST表维护最小前缀和

 

  f[i][0]=sum[i];
  if(query(1,n)>=0)
	 	ans++; 
	for(int i=2;i<=n;i++)
		if(query(i,n)-sum[i-1]>=0&&sum[n]-sum[i-1]+query(1,i-1)>=0)
		//i到n是否有负数
		//再次加上1~i是否有负数 
			ans++;
*** query(i,n)-sum[i-1]//序列中的段前缀和

 

p7244 章节划分

题意:将长为n的序列分为k段,每段取最大值,最大化所有最大值的最大公因数

SOL:

    枚举最大数的约数

	int tot=0;
	for(int i=1;i<=sqrt(extre);i++)
		if(extre%i==0)
		{
			p[++tot]=i;
			if(i!=extre/i)
				p[++tot]=extre/i;
		}
	sort(p+1,p+tot+1,cmp); 
 
尽可能多分段,若合法的段数大于等于k,则该约数为答案(多余的任意合并不会对答案造成影响)

计算段数:利用递归,每次找到区间最大值,若该数能整除约数则将其单独分段
否则将其归在左右较大的那一边

int cal(int l,int r,int mod)
{
	if(l>r||l<1||r>n) 
		return 0;
	int b=query(l,r);
	int ll=0,rr=0;
	if(a[b]%mod==0)	
		return cal(l,b-1,mod)+1+cal(b+1,r,mod);
	else 
	{
		if(l>1) 
			ll=cal(b+1,r,mod);
		if(r<n) 
			rr=cal(l,b-1,mod); 
		return max(ll,rr);
	}
} 
ll lca(ll a,ll b)
{
	while(a!=b)
	{
		if(a<b)
			swap(a,b);
		int x=lower_bound(f,f+61,a)-f;
		a-=f[x-1];
	} 
	return a;
}
在begin到end-1位置中进行二分 lower_bound(begin,end,num) 
	
	在从小到大的排序中
	lower_bound(数组名称,数组大小,x)-数组    
	第一个大于或等于x的数
	upper_bound
	第一个大于x的数
	
	在从大到小的排序中
  	lower_bound
	第一个小于等于x的数
	upper_bound
	第一个小于x的数

scanf("%d",&a[i]);
        a[i+n]=a[i];
F[i][i+n-1]//截取环的长度



标签:总结,21,int,ll,bound,ST,query,mod
From: https://www.cnblogs.com/blogzy/p/17978550

相关文章

  • ATF(Arm Trusted Firmware)
    ATF(ArmTrustedFirmware)是一个为ARMv8-A架构SoC提供的安全固件,其包含了多个组件和功能来确保系统的安全启动和运行时环境。以下是ATF中的一些主要功能和组件:1.**BL1(BootLoaderStage1)**:-这是ATF的第一阶段引导加载程序。-负责从非易失性存储器(如eMMC、UFS、NAND等)中......
  • UVA11218的题解
    题目翻译大意有九个人要去KTV唱歌,每三个人为一组分成三组,现在给出了\(n\)种分的组合,输入四个数\(a,b,c,s\)分别代表\(a,b,c\)这三个人的构成一个组合能获得\(s\)分,现在要求最多能获得多少得分。如果无法把分配九个人就输出-1。分析数据范围:看这数据,\(n<81\)不......
  • PG DBA培训21:PostgreSQL性能优化之基准测试
    本课程由风哥发布的基于PostgreSQL数据库的系列课程,本课程属于PostgreSQLPerformanceBenchmarking,学完本课程可以掌握PostgreSQL性能基准测试基础知识,基准测试介绍,基准测试相关指标,TPCC基准测试基础,PostgreSQL测试工具介绍,PostgreSQL性能基准测试案例1之BenchmarkSQL,Benchm......
  • [Mac软件]App Cleaner & Uninstaller 8.2.6应用程序清理和卸载
    AppCleaner&Uninstaller是一款Mac应用程序,它可以帮助用户完全删除应用程序及其相关的服务文件、扩展文件等。以下是该应用程序的主要功能:完全删除应用程序:通过将应用程序图标拖到垃圾桶中删除程序,可以彻底清除应用程序及其相关文件,释放磁盘空间。删除所有类型的服务文件:除了删除......
  • PG DBA培训22:PostgreSQL运维诊断之操作系统分析
    本课程由风哥发布的基于PostgreSQL数据库的系列课程,本课程属于PostgreSQLOperatingSystemAnalysisandDiagnosis,学完本课程可以掌握PostgreSQL操作系统性能优化分析及工具说明,操作系统工具之top/topas,操作系统工具之vmstat,操作系统工具之iostat,操作系统工具之free/lsps/swapinf......
  • 2024.1.21模拟赛 C题解
    简要题意略思路首先有一个\(O(nk)\)的暴力dp,30pts我们可以发扬人类智慧,构造势能函数\(U_x=\sum_{未选择的点i}dis(i,x)+h_i\),当前在\(x\)点定义\(f_i\)表示走到\(i\)点时势能函数的最小值,\(s_i\)表示\(i\)到起点的距离容易发现只会跨过起点进行转移,于是\(f_i=f_j+2\tim......
  • 闲话1.21
    颓。周日啊,大颓特颓......
  • 2024.1.21模拟赛 B题解
    题目大意略思路首先有一个50pts的网络流暴力考虑按照\(dp\)值分层,发现在同一层内,随着\(i\)递增,\(a_i\)递减由此可以进一步推出每一个点连接的出边,是下一层的一个区间,并且区间是单调的于是可以线段树优化建边,拿到60pts接着考虑模拟网络流,发现如果每次都选择第一条出边的话,就......
  • 今日总结
    词频数统计问题描述统计一个文本文件中的每个单词的出现次数,数据格式: 首先通过textFile()函数将文件读入JavaRDD,然后通过flatMap算子将每一行的数据进行分割,得到多个String,一行数据分割得到的多个String以Iterator的迭代器格式返回,返回之后的Iterator中的每一个String都会作......
  • 2024-01-21 闲话
    chatwithyspmonwhateveryouwant!自主命题闲话确实有点消耗家底,尤其是对我这种没啥家底的人来说。所以能不能来和yspm聊天!想说什么说什么!在家的生活实在是太寂寞了,原先觉得GraphofThought是adaptive的,今天读了一下代码,发现不是adaptive的,幻想破灭的一集。去a......