HDU 5443The Water Problem 线段树

来源:互联网 发布:软件测试第二版中文版 编辑:程序博客网 时间:2024/05/20 09:09

裸的区间求最大值

ACcode:

#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#define tmp (st<<1)#define mid ((l+r)>>1)#define lson l,mid,tmp#define rson mid+1,r,tmp|1#define push_up(x) sum[x]=max(sum[tmp],sum[tmp|1])#define maxn 1005using namespace std;int sum[maxn<<2];inline void build(int l,int r,int st){    if(l==r){        scanf("%d",&sum[st]);        return ;    }    build(lson);    build(rson);    push_up(st);}inline int que(int L,int R,int l,int r,int st){    if(L<=l&&r<=R)return sum[st];    int ret=0;    if(L<=mid)ret=max(ret,que(L,R,lson));    if(R>mid)ret=max(ret,que(L,R,rson));    return ret;}int main(){    int n,loop,cnt=1,m;    scanf("%d",&loop);    while(loop--){        scanf("%d",&n);        build(1,n,1);        scanf("%d",&m);        while(m--){            int x,y;            scanf("%d%d",&x,&y);            printf("%d\n",que(x,y,1,n,1));        }    }    return 0;}


0 0