poj3264线段数求最大最小值

链接:https://vjudge.net/contest/66989#problem/G

完完全全的水题,还是被坑了,一个return忘了写,de了半天bug!!

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1
const int maxn=;
const ll inf=1e15;
ll value1[maxn<<],value2[maxn<<];
void pushup(int rt)
{
value1[rt]=max(value1[rt<<],value1[rt<<|]);
value2[rt]=min(value2[rt<<],value2[rt<<|]);
}
void btree(int l,int r,int rt)
{
if(l==r)
{
scanf("%lld",&value1[rt]);
value2[rt]=value1[rt];
return ;
}
int m=(l+r)>>;
btree(ls);
btree(rs);
pushup(rt);
}
ll query1(int L,int R,int l,int r,int rt)
{
if(L<=l&&r<=R)return value1[rt];
int m=(l+r)>>;
ll ans=;
if(L<=m)ans=max(ans,query1(L,R,ls));
if(R>m)ans=max(ans,query1(L,R,rs));
return ans;
}
ll query2(int L,int R,int l,int r,int rt)
{
if(L<=l&&r<=R)return value2[rt];
int m=(l+r)>>;
ll ans=inf;
if(L<=m)ans=min(ans,query2(L,R,ls));
if(R>m)ans=min(ans,query2(L,R,rs));
return ans;
}
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m)){
btree(,n,);
while(m--){
int l,r;
scanf("%d%d",&l,&r);
printf("%lld\n",query1(l,r,,n,)-query2(l,r,,n,));
}
}
}
上一篇:SteamVR Unity工具包(VRTK)之概览和控制器事件


下一篇:APUE读书笔记:进程控制