每个软件人都认为自己是最聪明的,于是,一场比赛开始了…...
软件人们都想知道谁是最聪明的,于是进行了如下一个比赛。首先,软件人面前会有一排共 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<
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)