线段树有5个点被T掉了!求助!!
查看原帖
线段树有5个点被T掉了!求助!!
133884
MFJ0v0楼主2020/10/15 14:00

想练习个线段树,但是是T掉了,求助!感谢所有提供建议的大佬!!

#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
using namespace std;
#define ll long long
const ll maxn = 100010;
ll n,m,x,y,k,ans;
struct node{
	ll r,l,w,f;
}tree[4*maxn+1];
inline int read(){
	int x=0,f=1;char ch=getchar();
	while (!isdigit(ch)){if (ch=='-') f=-1;ch=getchar();}
	while (isdigit(ch)){x=x*10+ch-48;ch=getchar();}
	return x*f;
}
void build(ll l,ll r,ll k){
	tree[k].l=l;
	tree[k].r=r;
	if(l==r){
		cin>>tree[k].w;
		return;
	}
	ll m=(l+r)>>1;
	build(l,m,k*2);
	build(m+1,r,k*2+1);
	tree[k].w=max(tree[k*2].w,tree[k*2+1].w);
}
void cx(ll x,ll y,ll k){
	if(tree[k].l>=x&&tree[k].r<=y){
		ans=max(ans,tree[k].w);
		return;
	}
	ll m=(tree[k].l+tree[k].r)>>1;
	if(x<=m) cx(x,y,k*2);
	if(y>m) cx(x,y,k*2+1);
}
int main(){
	cin>>n>>m;
	build(1,n,1);
	while(m--){
		ans=0;
		x=read();
		y=read();
		cx(x,y,1);
		cout<<ans<<endl;
	}
	return 0;
} 
2020/10/15 14:00
加载中...