线段树
主要是对一维数组区间求极值,区间和,对区间修改,或单点修改。
一、
//针对最小查询
#include<bits/stdc++.h>
using namespace std;
int a[100];
struct Tree
{
int left,right;
int min;
};
Tree tree[100];
void build(int id,int l,int r)
{
tree[id].left=l;
tree[id].right=r;
if (l==r)
{
tree[id].min=a[l];
}
else
{
int mid=(l+r)/2;
build(id*2,l,mid);
build(id*2+1,mid+1,r);
tree[id].min=min(tree[id*2].min,tree[id*2+1].min);
}
}
/*void update(int id,int pos,int val)
{
if(tree[id].left==tree[id].right)
{
tree[id].min=val;
}
else{
int mid=(tree[id].left+tree[id].right)/2;
if(pos<=mid) update(id*2,pos,val);
else
{
update(id*2+1,pos,val);
tree[id].min=min(tree[id*2].min,tree[id*2+1].min);
}
}
}*/更新打错了
int query(int id,int l,int r)
{
if(tree[id].left==l&&tree[id].right==r)
{
return tree[id].min;
}
int mid=(tree[id].left+tree[id].right)/2;
if (r<=mid) return query(id*2,l,r);
else if (l>mid) return query(id*2+1,l,r);
else return min(query(id*2,l,mid),query(id*2+1,mid+1,r));
}
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
build(1,1,n);
cout<<query(1,1,3);
}
今天,老师公告说报名ACM暑假集训队,并且截止到今天12点,而且强调自愿,不要强迫。说真的我有一种感觉,不会算法的程序员和搬砖工没什么区别,我厚着脸皮报上了,我知道洛谷这几天是没法打了,复习迫在眉急!但是我还是会尽一切空余时间去学的!!!加油一定要在暑假集训前缩小差距!!