P2880 平衡的阵容

news/2024/11/20 6:14:51/

  在这里介绍一种新的算法(十分优秀):ST表

  这个算法,其实就是求一段区间内最大值或者最小值是多少,当然就是一种降低时间复杂度的优化。

  显然线段树是不行的(复杂度太高O(mlogn)),所以妄想写线段树的人就放弃吧~      :3 

  那么首先明白概念性解释,对于dp[i][j],意思是以i为起点,长度为2j的区间里的最大值(注意我的表述)。

  那么就很简单了,主要思想就是每次一分为二,分别求最大值,再求整个的最大值。

  注意不要有区间重叠(要不就麻烦了),长度也可以优化( i +( 1 << j )- 1 <= n),-1排去第i个点的长度,因为dp[i][j-1]并不包括第i+2j-1的那个点。

  直接上代码:

#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
#define maxn 50005
int dp[maxn][21],dj[maxn][21];
int n,q,a[maxn],b[maxn];
void Deal_now()
{for(int i=1;i<=n;i++){dp[i][0]=a[i];dj[i][0]=a[i];}for(int j=1;(1<<j)<=n;j++)for(int i=1;i+(1<<j)-1<=n;i++){dp[i][j]=max(dp[i][j-1],dp[i+(1<<(j-1))][j-1]);dj[i][j]=min(dj[i][j-1],dj[i+(1<<(j-1))][j-1]);}    for(int i=1;i<=n;i++)b[i]=log2(i);
}
int query(int L,int R)
{int k=b[R-L+1];int ans1=max(dp[L][k],dp[R-(1<<k)+1][k]);int ans2=min(dj[L][k],dj[R-(1<<k)+1][k]);return ans1-ans2;
}
int main()
{scanf("%d%d",&n,&q);for(int i=1;i<=n;i++)scanf("%d",&a[i]);Deal_now();for(int i=1;i<=q;i++){int x,y;scanf("%d%d",&x,&y);printf("%d\n",query(x,y)); }return 0;
}

 

转载于:https://www.cnblogs.com/popo-black-cat/p/10056118.html


http://www.ppmy.cn/news/513593.html

相关文章

Oracle-ASM磁盘组HIGH模式丢盘问题处理

背景: 用户一套Oracle19c的RAC集群ASM磁盘组使用了3个存储作为HIGH以及NORMAL冗余模式&#xff0c;每个存储分别对应一个failgroup&#xff0c;其中2个存储出现了故障导致ASM磁盘组对应的failgroup磁盘全部offline&#xff0c;在存储恢复正常之后&#xff0c;需要将offline的磁…

记录--新的HTML标签 :search

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 本文介绍了一种新的HTML元素搜索方法&#xff0c;并提供了一个实用的工具来帮助开发者快速找到所需的元素。这对于那些需要处理大量HTML元素的开发者来说是非常有用的。文章还通过提供一些常见元素的用…

【初识C语言】字符串+转义字符+注释

文章目录 1. 字符串2. 转义字符转义字符表常见转义字符 3. 注释 1. 字符串 “hello world.\n” 上面这种由双引号引起的一串字符就被称为字符串&#xff1b; 字符串的存储 C 语言当中没有字符串类型&#xff0c;如果想要将字符串存储起来的话就需要用到字符串数组。 #include…

AI 绘画工具 Stable Diffusion 本地安装使用

最近要用到 AI 绘画&#xff0c;所以研究了下目前市面上的 AI 绘画工具&#xff0c;真可谓是琳琅满目&#xff0c;但主流的还是 Stable diffusion 和 Midjourney 两大阵营。 Midjourney 不多说&#xff0c;开箱即用&#xff0c;对新手非常友好&#xff0c;但不免费&#xff0c…

RISCV-semi host原理以及实践

嵌入式裸机调试需要在有限资源的目标硬件上尽可能挖掘更多的信息&#xff0c;比如打印寄存器等等&#xff0c;但是即便看似很简单的串口打印&#xff0c;在有的情况下也是奢望&#xff0c;针对这种情况&#xff0c;能够有效利用主机资源协同调试的semi-host&#xff08;半主机&…

依靠自我

必读网&#xff08;http://www.beduu.com&#xff09;整理 依靠自我 我们需要爱默生式的思想家 当所有的编译工作都完成之后&#xff0c;我突然发现自己在编译过程中经常出现的“为什么要编译爱默生的文章”的疑问都变得多余了&#xff0c;也就是说&#xff0c;我突然认为&…

华为魔术2手机拆机图解_荣耀Magic2手机内部做工如何?荣耀Magic2手机拆机

荣耀Magic2手机内部做工如何&#xff1f;荣耀Magic 2手机搭载的是麒麟970处理器&#xff0c;售价3799元起&#xff0c;这款手机的内部做工究竟如何呢&#xff1f;接下来的文章中小编将会带来这款手机的拆机全过程图解评测&#xff0c; 荣耀Magic2手机拆机 1、首先关机&#xff…