栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

【问题描述】

每个软件人都认为自己是最聪明的,于是,一场比赛开始了…...
软件人们都想知道谁是最聪明的,于是进行了如下一个比赛。首先,软件人面前会有一排共 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< 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/975174.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号