【C++】最敏捷的机器人(st表模板)

【C++】最敏捷的机器人(st表模板),第1张

【问题描述】

每个软件人都认为自己是最聪明的,于是,一场比赛开始了…...
软件人们都想知道谁是最聪明的,于是进行了如下一个比赛。首先,软件人面前会有一排共 m 个数,最先把每连续 p 个数中最大和最小值找出来者获胜。但是小明也想知道答案,你能帮他搞定吗?

【输入形式】

第一行为 m,p 意义如题目描述。
第二行共 m 个数,为数字序列,所有数字均在 longint 范围内,即所有数均为整数,且在[-2^31, 2^31-1]范围内。

【输出形式】

共 n-p+1 行,第 i 行为第主至第 i+p-1 这 p 个数中的最大和最小值。

【样例输入】

5 3

1 2 3 4 5

【样例输出】

3 1

4 2

5 3

【样例说明】

对于全部数据,1 ≤ k ≤ n ≤ 10^5。

思路

这道题大一在《信息学奥赛一本通》上看过,是一道st表模板题,理解位运算和st表的存储过程是理解st表的关键。

AC_Code
#include 
#include 
#include 
#include 
#include 
#include 
#define ll long long
#define db double  
using namespace std;

const int maxn = 11001;
const int inf=0x7fffffff/2-1;

const int N = 1e5+5;
int n,k,f[N][25],f1[N][25],a[N],Log[N];

inline int read(){
    int date=0,w=1;char c=0;
    while(c<'0'||c>'9'){if(c=='-')w=-1;c=getchar();}
    while(c>='0'&&c<='9'){date=date*10+c-'0';c=getchar();}
    return date*w;
}

void getinit(){
	Log[1] = 0; 
	for(int i=2;i<=n+1;i++) Log[i] = Log[i/2] + 1;
	for(int i=1;i<=n;i++) {
		f[i][0] = f1[i][0] = a[i];
	}
	for(int j=1;(1<

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1498094.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-25
下一篇 2022-06-25

发表评论

登录后才能评论

评论列表(0条)