代码:
/*
st[i][0]=s[i];
st[i][j]=min(st[i][j-1],st[i+1<<(j-1)][j-1]);
d=min(st[i][xx],st[i+p-(1<<xx)][xx]);
*/
#include<bits/stdc++.h>
#define ll long long
#define r read()
#define MAX 0x3f3f3f3f
#define MIN -0x3f3f3f3f
using namespace std;
ll read();
int n,s[1000010],st[1000010][30],p,xx;
ll read(){
ll dx=0,x=1;
char xx=getchar();
for(;xx<'0'||xx>'9';xx=getchar())
if(xx='-')
x=-1;
for(;xx>='0'&&xx<='9';dx=dx*10+xx-48,xx=getchar());
return dx*x;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
n=r;
p=r;
xx=log2(p);
for(int i=1;i<=n;st[i][0]=s[i]=r,i++);
for(int j=1;j<=log2(n);j++)
for(int i=1;i<=n-(1<<j)+1;st[i][j]=min(st[i][j-1],st[i+(1<<(j-1))][j-1]),i++);
for(int i=1;i<=n-p+1;cout<<min(st[i][xx],st[i+p-(1<<xx)][xx])<<"\n",i++);
return 0;
}
测了数据都是对的,为什么说我第一行输了负号qwq