线段树求助,为什么会莫名其妙地输出个很大的数
  • 板块P2032 扫描
  • 楼主KingPowers
  • 当前回复2
  • 已保存回复2
  • 发布时间2022/2/11 12:54
  • 上次更新2023/10/28 08:54:55
查看原帖
线段树求助,为什么会莫名其妙地输出个很大的数
530180
KingPowers楼主2022/2/11 12:54
#include<bits/stdc++.h>
#define int long long
using namespace std;
int v[400005],lazy[400005],n,m,a[400005],tmp,l=1,r;
void update(int k)
{
	v[k]=max(v[k<<1],v[k<<1|1]);
}
void build(int l,int r,int k)
{
	if(l==r)
	{
		v[k]=a[l];
		return;
	}
	int mid=(l+r)>>1;
	build(l,mid,k<<1);
	build(mid+1,r,k<<1|1);
	update(k);
}
int get_out(int l,int r,int now_l,int now_r,int k)
{
	if(l<=now_l&&r>=now_r)
		return v[k];
	int mid=(now_l+now_r)>>1,a,b;
	if(l<=mid)
		a=get_out(l,r,now_l,mid,k<<1);
	if(r>mid)
		b=get_out(l,r,mid+1,now_r,k<<1|1);
	return max(a,b);
}
signed main()
{
	cin>>n>>r;
	for(int i=1;i<=n;i++)
		cin>>a[i];
	build(1,n,1);
	while(r<=n)
	{
		cout<<get_out(l,r,1,n,1)<<endl;
		l++,r++;
	}
}

RT,就比如样例,应该输出5 5 4,我却输出5 5 71212945774165888 而且我还把v数组里的数都打印了一遍,建树也没问题啊,难道是get_out的问题?

2022/2/11 12:54
加载中...