求助
  • 板块灌水区
  • 楼主QZY2008
  • 当前回复3
  • 已保存回复3
  • 发布时间2022/8/8 22:23
  • 上次更新2023/10/27 16:22:00
查看原帖
求助
547609
QZY2008楼主2022/8/8 22:23

萌新忘记st模板了,pre()部分为什么卡了。

#include <bits/stdc++.h>
using namespace std;
const int N=1000005; 
const int M=31;
int n,m,c;
int num[N];
int st1[N][M];
int st2[N][M];
inline void pre(){
	for (int j=1;j<=M;j++)
		for (int i=1;i+(1<<j)-1<=n;i++)
			st1[i][j]=max(st1[i][j-1],st1[i+(1<<j-1)][j-1]),
			st2[i][j]=min(st2[i][j-1],st2[i+(1<<j-1)][j-1]);
}
int lg[N];
inline int query_ans(int l,int r){
	int mx,mn;
	int d=lg[r-l+1];
	mx=max(st1[l][d],st1[r-(1<<d)+1][d]);
	mn=min(st2[l][d],st2[r-(1<<d)+1][d]);
	return mx-mn;
}
int main(){
	scanf("%d%d%d",&n,&m,&c);
	for (int i=1;i<=n;i++)
		scanf("%d",&num[i]);
	lg[0]=-1;
	for (int i=1;i<=n;i++)lg[i]=lg[i>>1]+1,st1[i][0]=st2[i][0]=num[i];
	pre();
	for (int i=1;i<=n-m+1;i++){
		int l=i,r=i+m-1;
		if (query_ans(l,r)<=c)
			printf("%d\n",i);
	}
}
2022/8/8 22:23
加载中...