数据结构中的竞赛树代码
时间: 2023-08-20 15:18:09 浏览: 39
竞赛树(Tournament Tree)是一种二叉树数据结构,用于在一系列元素中找到最小值或最大值。下面是C++实现竞赛树的代码:
```cpp
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
int n,m;
int a[maxn];
int tree[maxn<<1];
void build_tree(){
for(int i=n;i<2*n;i++){
tree[i]=i-n;
}
for(int i=n-1;i;i--){
tree[i]=a[tree[i<<1]]<a[tree[i<<1|1]]?tree[i<<1]:tree[i<<1|1];
}
}
int query(int l,int r){
int ans=0x7f7f7f7f;
for(l=l-1+n,r=r+1+n;l^r^1;l>>=1,r>>=1){
if(~l&1) ans=min(ans,a[tree[l^1]]);
if(r&1) ans=min(ans,a[tree[r^1]]);
}
return ans;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
build_tree();
scanf("%d",&m);
while(m--){
int l,r;
scanf("%d%d",&l,&r);
printf("%d\n",query(l,r));
}
return 0;
}
```
在上述代码中,build_tree函数用于构建竞赛树,query函数用于查询区间[l,r]中的最小值。在主函数中,首先读入n个数,然后构建竞赛树,最后进行m次查询。