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



