线段树CE求助。。。
查看原帖
线段树CE求助。。。
850498
__erinww楼主2023/6/19 19:38
#include <iostream>

using std::min;

const int MAXN = 2e6+10;

struct  TREE_NODE{
	int l,r;
	int value;
} tree[MAXN << 1 +2];

int n,m,a[MAXN];

void BUILD(int p,int l,int r){
	tree[p].l = l;tree[p].r = r;
	if(l == r){
		tree[p].value = a[l];
		return ;
	}
	int mid = l+r >> 1;
	BUILD(p << 1,l,mid);
	BUILD(p << 1|1,mid+1,r);
	tree[p].value = std::min(tree[p << 1].value,tree[p << 1|1].value);
}
int SEARCH(int p,int l,int r){
	int x = tree[p].l,y = tree[p].r;
	if(x >= l && y <= r) return tree[p].value;
	int mid = x+y >> 1;
	int step = MAXN << 10;
	if(l <= mid) step = min(step,SEARCH(p << 1,l,r));
	if(r >  mid) step = min(step,SEARCH(p << 1|1,l,r));
	return step;
}

signed main(){
	scanf("%d%d",&n,&m);
	for(int i = 1;i <= n;i ++) scanf("%d",&a[i]);
	BUILD(1,1,n);
	for(int i = 1;i <= n;i ++){
		if(i == 1) printf("0\n");
		else if(i-m <= 0) printf("%d\n",SEARCH(1,1,i-1));
		else 	   printf("%d\n",SEARCH(1,i-m,i-1));
	}
	return 0;
}

洛谷CE,dev 上编译了200MB

2023/6/19 19:38
加载中...