rt
下载数据后用洛谷IDE跑,过了。。不知道是不是有UB。
或者就是我写错了,请大佬看看。
谢谢
#include <bits/stdc++.h>
#define MAXN 10000000
using namespace std;
struct node
{
int val,left,right;
node(){ val=0; }
} tree[MAXN];
void build(int i,int l,int r) //建树
{
tree[i].left=l; tree[i].right=r;
if(tree[i].left==tree[i].right) { scanf("%d",&tree[i].val);return; }
if(r>l)
{
int mid=(l+r)/2;
build((i<<1),l,mid);
build((i<<1)|1,mid+1,r);
tree[i].val=std::max( tree[i<<1].val , tree[(i<<1)|1].val );
}
}
int Find(int i,int l,int r)//查找
{
if(tree[i].left==l && tree[i].right==r) return tree[i].val;
else
{
int mid=(tree[i].left+tree[i].right)/2;
if(r<=mid) Find(i<<1,l,r);
else if(l>mid) Find( (i<<1)|1,l,r );
else
{
int l_max=Find(i<<1,l,mid),r_max=Find( (i<<1)|1,mid+1,r );
return std::max(l_max,r_max);
}
}
}
int main()
{
int n,m;
std::scanf("%d%d",&n,&m);
build(1,1,n);
for(int i=1;i<=m;++i)
{
int ll,rr,ans=1;
std::scanf("%d%d",&ll,&rr);
ans=Find(1,ll,rr);
std::printf("%d\n",ans);
}
return 0;
}
第一个测试点:
10 10
34510650 17635986 629392810 531021973 464687714 484934800 168882190 645518365 922058895 397659551
2 9
1 8
1 7
2 10
3 9
4 10
3 10
1 7
2 10
2 8
922058895
645518365
629392810
922058895
922058895
922058895
922058895
629392810
922058895
645518365
谢谢谢谢