题目描述
给出 n(n≤100) 和 n 个整数 ai (0≤ai≤1000),求这 n个整数中最小值是什么。
输入输出样例
输入
8
1 9 2 6 0 8 1 7
输出
0
这道题聪明的oier肯定得用线段树来写啦!
于是,5分钟后......
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,m;
int a[105];
struct tree{
int l,r;
int maxn;
}t[505];
void build(int p,int l,int r)
{
t[p].l=l,t[p].r=r;
if(l==r)
{
t[p].maxn=a[l];
return ;
}
int mid=l+r>>1;
build(p*2,l,mid);
build(p*2+1,mid+1,r);
t[p].maxn=min(t[p<<1].maxn,t[p<<1|1].maxn);
}
int ask(int p,int l,int r)
{
if(t[p].l>=l&&t[p].r<=r)
{
return t[p].maxn;
}
int mid=t[p].l+t[p].r>>1;
int maxn=0;
if(mid>=l) maxn=min(maxn,ask(p<<1,l,r));
if(mid<r) maxn=min(maxn,ask(p<<1|1,l,r));
return maxn;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
build(1,1,n);
printf("%d",ask(1,1,n));
}
正常的来说,暴力枚举也不是不可以
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
using namespace std;
int n,a[105],ans=1005;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
ans=min(ans,a[i]);
}
printf("%d",ans);
}